有关这篇文章的起源请详见上一篇。
目前的外挂修改进度大致追加了以下的一些功能。
第一个是controller实作IoC模式(原本只有做在widget)。
第二个是暂且只有models支援namespace但会有目录的要求。
(不过根据设计,理论上应该是连libraries底下的都可以支援namespace)
(但目前的controller没有支援,因为貌似要动到core,有空再研究)
第三个是将csrf是否验证可以自由在controller中决定。
(Laravel是强制验证post,不过有时不想用get也不想要验证资料要改code,
CI本身的csrf也是那样,除非你动设定档,但是每次都要搞设定很麻烦,
所以找到他csrf的验证方式后就用其他的方法来取代掉了。)
第四个,路由改成不支援直接呼叫controller,亦即你原本如果档名叫做
UserController,你的网址可能像这样:
hostname/UserContrller
我将他改成不允许如此的结构。
你必须去设定路由,但是ci本身的路由设计有缺陷,他变成你每个路由都要
详细设定函式(就安全来说,非常严谨,但不方便,少了弹性)
基本上,在原本的$route设定的路由是照原本的机制。
但在同一份档案我追加了$route_controller的设定。
当你如此设定时:
$route_controller = [
'user' => 'UserController'
];
这个user将完全取代UserController
举例来说原本可能是:
hostname/UserController/run
现在会变成
hostname/user/run
第五个,虽然第四个加上了控制器的弹性设定,但是一但你的表单是走post的
格式时,将会强迫你必须在方法前面加上"post_"
举例来说,你的表单用post送出的action是:
/UserController/login
但你在实做method时,必须为:
function post_login(){
}
这个的好处就是当你在设计时,你会知道这个函式就是要接收表单的。
而且也避掉不当的post行为。
感觉越来越有Laravel的风格?
我觉得这样说虽不能说不无道理。
但其实只是觉得ci在一些设计上还是不太足够。
不过在这次整个外挂设计过程中,果然ci的原始设计还是够弹性的……
够让你想上外挂时还能在不动核心的情形下做弹性修改。
当然,这外挂到这阶段也算是实验阶段还没完成。
不过我自己用起来是觉得还算得上OK。
如果你有ci使用上觉得不够方便或是设定麻烦的部份。
可以跟我说,我看看有没有可能用外挂的形式来解决这些问题。