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