问speedphp控制器名称中[Controller]和方法名前缀[action]的作用

#1 tanidea

今天才发现这个PHP框架,看了绍介和手册,感觉很不错的样子。
有个疑问就是
speedphp控制器名称中[Controller]和方法名前缀[action]的作用和意义何在?
是框架的约定吗?
是否出于安全的必要?
害怕非法用户直接构造URL提交请求,进而直接执行方法?
那有没有不用添加前缀也能达到安全的方式?
不好意思,问的有点多啊。{:soso__3110130392203091378_3:}



控制器是放在[protected\controller]目录下的,目录名称就是controller,这就表明目录下的文件都是控制器了。
在控制器文件中还要加上[Controller],感觉多余了。
[action]方法前缀也是,增加了代码输入量。

本着一切从简的原则,能不能去掉?
代码好像在[protected\lib\speed.php]68和69行。
$controller_name = $__controller.'Controller';
$action_name = 'action'.$__action;

第三方类库和扩展目录搜索优先级是:model > include > controller
应该不是这个原因吧。




2016-06-22 23:48:09

#2 jake

3.1版的框架就是不加controller和action的。

首先这是一个框架俗成的约定,或者说是对于控制器的一个辨别。毕竟控制器和其他的普通php类不一样。就跟java里面的service为什么要叫service一样,其实也是一个普通类,只是编程需要给加入新的理解。

其次也是更为安全些。加了action前缀的方法才能通过url调用,不加前缀的就是普通的辅助方法,url不能调用。
当然不加的时候,通过private修饰也可以(3.1版的做法),但是不够直观。

一个框架最重要的事情是提供更为直观和通用的方式,给予开发者基础的支持。

另外,还有个情况就是,3.1版没有前缀,经常会发生控制器和模型类重名的情况,所以还专门做了个提示 https://github.com/SpeedPHP/spee ... Controller.phpL158
spError("方法 {$name}未定义!
请检查是否控制器类(".get_class($this).")与数据模型类重名?");
并且就算是中文提示,还不乏有人看不懂来提问,可以论坛搜索一下就知道这个问题有多少人理解不了了,

所以新版就加入这样的约定,也算是一种改良吧,其实没那么难理解。

而在新版发布之前的上百个项目的实践中验证了,这是一个比较不错的做法。


2016-06-23 08:52:10

#3 tanidea

才接触speedphp框架,本着用新不用旧的原则,只看了新版,不知道和3.1版本何区别?arg();这个函数是什么单词构成的?或是说如何快速理解它 :)

看完了手册,感觉这框架很不错,喜欢。
相比其他框架,构造出来的使用语法(暂且叫它语法),多得像另外一门语言了。
而且某些语法看起来很奇怪,用法更奇葩,这样用也行,那样用也行,参数可以是数组,也可以是字符串,个数也不定。
当语法不是清晰、确定、明了的时候,一变十,十变百,这样的语法多了,整个框架就是一门难学的语言,而且仅对这个框架有效,离开框架就什么也不是。

下面代码,当看一眼时,拟懂非懂,懂的是变量和函数名。不懂的是:‘’是什么,‘|’是什么。

{$create_time|date="y-m-d",}
{$name|md5|strtoupper|substr=0,3} 等于 {:substr(strtoupper(md5($name)),0,3)} (另外的易懂的实现方法)

编译后



即然这样,为什么不使用原生,或是接近原生的语法,美观高效易懂。
例如:
{date("y-m-d",$create_time))}
{substr(strtoupper(md5($name)),0,3))}


如果有多种实现方法,选择一种快速,便捷,高效、易懂的就行,如果每一种都包含进来的,要做大而全,代码必多又臃肿,容易进入80%和20%的现象。

有些框架的SQL封装繁杂,各种条件构造,各种连贯操作方法,要做一个复杂点的查询代码量就会很多,而且不易看懂。
这点上难以接受,如果使用接近原生的方式,看起来就很舒服,一看sql语句就知道对或错,或是将要做什么。

有些框架加入了太多设计者的想法,设计了很多封装用法,但有的感觉像自作聪明,或是多此一举。
有的明明可以用原生PHP语法,却远离原生,在之上搞一套自己的,好像不是为了高效开发,而是为难使用者或是个人代码show,背离了框架的用意。
用一个框架还得花时间精力去学习框架设计者构造出来的难懂语法。离开了这框架却什么也用不上。除非框架是一流的,值得去学习,否则…
还有就是,不是说这些框架不好,只是说不合适我。

2016-06-23 12:20:24

#4 jake

新版和3.1版关系并不大,只有理念是一致的,可以说3.1版是08年以前我对于php开发的理解,而新版是11年后的理解。

arg()函数是获取提交参数的,arguments的意思。

学习主要是手册,新版挺简单的,看完手册基本能应付一般的开发了。

2016-06-23 13:05:56

#5 tanidea

jake 发表于 2016-6-23 13:05
新版和3.1版关系并不大,只有理念是一致的,可以说3.1版是08年以前我对于php开发的理解,而新版是11年后的 ...
3.1版的手册也看了一点,功能也比较多,新版的功能还会增加吗?打算用新版做个项目试试。比较期待缓存或生成HTML功能。毕竟这个是必用的功能。

2016-06-23 19:41:03

#6 jake

tanidea 发表于 2016-6-23 19:41
3.1版的手册也看了一点,功能也比较多,新版的功能还会增加吗?打算用新版做个项目试试。比较期待缓存或 ...
缓存和生成静态HTML,有了缓存其实生成静态HTML是可有可无的。呵呵
这些功能都是一些编程技巧,现在基于新版在做一个大点的例子,包含了权限、缓存、生成HTML,前后台之类的示范。

看完手册能理解的人,直接看看这个例子就明白了。

2016-06-24 08:55:48

#7 tanidea

jake 发表于 2016-6-24 08:55
缓存和生成静态HTML,有了缓存其实生成静态HTML是可有可无的。呵呵
这些功能都是一些编程技巧,现在基于 ...
我感觉缓存是必要的,如果每次访问都要连接数据库获取数据,那性能大打拆扣啊。
比如做一个BLOG,或者是文章类网站,缓存或是生成HTML太有必要了!

新版手册看了一遍就喜欢这简、轻、快的框架,尤其是SQL操作那块,很认同这种方法啊。
只作简单的封装,有什么比使用SQL语句来得更直观高效。
新版是“不按照安全的模式进行开发,就无法开发”的强制策略。
顶一个,不必有过多的实现方法,选择一种安全、高效、快速的就成。
框架里不需要万年难用得上一次的代码。

又看一遍新版手册,很想用新版动手实践下,但发现内置的功能少了点。
又去看了3.1的功能,看看能不能扒些代码过来用用,现在你在做新例子的话,什么时候可以看到呢?
如果缓存那块已经完成,可不可以发给我看看,或者有类库,函数库也成。:)

文件protected\controller\MainController.php
第7行的注释有错,
// 回答:页面自动输出,请看default_index.html
default_index.html 应该是 main_index.html


2016-06-24 10:44:07

#8 jake

tanidea 发表于 2016-6-24 10:44
我感觉缓存是必要的,如果每次访问都要连接数据库获取数据,那性能大打拆扣啊。
比如做一个BLOG,或者是 ...
感谢指出哦,注释错误已经修正了 https://github.com/SpeedPHP/spee ... 660e8a8c6ba4a0c520c

缓存这块,要不要封装都差不多的。php原生缓存库很简单 http://cn.php.net/manual/zh/class.memcached.php

现在例子在做权限和后台,之后才会做静态HTML和缓存,这是通常的顺序。

2016-06-24 10:50:57

#9 tanidea

jake 发表于 2016-6-24 10:50
感谢指出哦,注释错误已经修正了 https://github.com/SpeedPHP/spee ... 660e8a8c6ba4a0c520c

缓存这块, ...
不客气哈,等着你完成例子。{:soso__3110130392203091378_3:}

2016-06-24 11:21:17