Re: [分享] 尚未定义名称的ci扩充功能

楼主: tkdmaf (皮皮快跑)   2015-10-17 01:33:02
※ 引述《tkdmaf (皮皮快跑)》之铭言:
: 至于这个外挂什么时候会开始释出beta版我还在思考中。
: 毕竟挂上去时会改变不少ci的特性。
: 虽然用意是希望让ci变得更好用,更严谨,也更安全些。
: (也解除了部份不需要安全的请求,原本被强制处理的问题)
: 估计等我解决了restful_controller的xml格式吧。(json格式已做)
: (还有要重构以及处理一些用不到的code)
目前的改革进度变这样了,当然都还是实验阶段。
较新的进度是重新修改了资料夹的路径
在application底下新增了app资料夹
结构:
app
-controllers
-dispatchers
-models
-views
-widgets
routes.php
说明:
controllers <==就是原本的controllers,默认先找这一层,找不到就会去
原本的controllers找
dispatchers <==本来想用viewcontrollers,但是没有底线怪怪的。
view_controllers感觉更怪。
于是想到用这个,就有点类似控制、调度的意思。
不过本意是因为disp像是display的缩写。
models <== 我想不用多做解释了吧。只是要注意写在这里就得挂上namespace。
views <== 这应该也不用解释了。
widgets <== 新做的功能,新的位置。
关于这个dispatchers我得好好来说明了。
它跟controllers不同在于原本的controllers只视为功能性的控制。
而disptchers则是view_controller。
二者继承的对象也不同,controllers继承BaseController
而disptchers则是继承ViewController(同功能可继承的还有ViewDispatcher,因为
我还拿不定主意要留那个名称)
用途也不同,继承自ViewController的话,你就必须给予layout的档名。
事实上…这是一个controller对应一个layout view的具体实现。
重点是他主要切开一个画面中可能有多个资料实现的混杂情形。
虽然很多人可能又把很多流程或资料写在model,但怎么都觉得混乱。
一个明白的例子像这样:
结构:
app
-dispacthers
-front
-demo
file:DemoDispacther.php
file:DemoLayout.php
file:DemoModel.php
<?php
use app\dispatchers\front\demo\DemoModel;
class DemoDispatcher extends ViewController
{
protected $_view = 'front/demo/DemoLayout';
function index($id){
$this->id = $id;
}
function _model_row()
{
return DemoModel::find($this->id);
}
function _model_query()
{
return DemoModel:all();
}
}
如上述这样设置的话。
你在DemoLayout.php这个view档案将可以直接取得$row和$query
系统本身会过滤带有_model_的函式并将后续的名称转成变量放进view(应该称layout)。
另外关于url的部份,如果你的index未带参数就可以省略index
要注意的是在dispatchers中。index是必定被执行的对象。
当然,在index中return的资料必须是阵列,而且会原原本本的反应在view。
这个具体的要求只有一点:一个controllers的layout只对应一个layout view。
我知道可能有些是把参数填写函式,以参数名来决定view。
但这种使用的情况绝少,真有这种情形建议使用controller当做特殊流程处理。
大多数的时候,不同的view要加载的资料根本上也是不同的。
其中要注意一点就是关于ViewLayout并没有放在View资料夹这件事。
我会告诉你其实model的档案你也不一定要放在models中
如果你的MVC是一个模组化的整板面的功能。
我反而不建议分开来放。
我自己的心得常常就是明明就只是单纯同一个模组下的单一MVC结构。
却要把controllers、models、views分的大老远。
何必如此?
而且这样的好处是如果你这个模组结构是可以套给另一个专案使用你只要整个资料
夹复制过去再来改一改就好了。而不用一个档案一个档案去找对应的放置位置。
当然,原本的$this->load->model(),$this->load->library()
或是常常用的$this->input->post()之类的是可以正常使用的。
再来就是routes.php我将他复制到app底下了。
因为外挂本身已经锁定原本的url呼叫controller是行不动的。
所以会很频繁的设置routes
不过有一个很重要的改变就是
$route['default_controller] = 'main';
如果你这样设,但是并没有main这个controller时
他会自动去找$route_controller的设定如下:
$route_controller = [
'main' => 'front/MainController'
];
并且自动对应。
其他的models和views用法基本上就没什么不同。
只是在这边models必须使用namespace才能取得正确的model路径这一点要注意。
widgets目前我资料夹移过来了但功能还没移。
这几天会改过来。
其他的功能还在陆陆续续边想边实现中。
一些觉得怪怪的东西也会持续修正。
同样希望大家有什么意见或建意请给予指教。
(先存盘,文章可能会有修正)

Links booklink

Contact Us: admin [ a t ] ucptt.com