原文發表於:控制器在mvc分層中的主要作用是處理請求與響應。phalcon中的控制器類必須以「controller」為字尾,action則以「action」為字尾。phalcon入門教程之控制器
「phalcon\mvc\controller
」是phalcon中控制器的基類,我們寫的控制器類通過繼承此基類,可以呼叫在di中註冊的各種服務。乙個簡單的控制器類示例如下:
use phalcon\mvc\controller;
class indexcontroller extends controller }
在瀏覽器中訪問http://localhost/index/index
即可看到列印結果。
initialize()函式
phalcon\mvc\controller
中提供了初始化函式initialize()
,它是最先執行的,並且會優先於任何控制器的其他action:
public function initialize()
有朋友可能會問,為什麼不是__construct()
函式?
onconstruct()函式
其實在phalcon\mvc\controller
控制器基類中,__construct()
函式已經被宣告為final
,明確禁止子類重寫此函式(參考: ) 。同時,phalcon\mvc\controller
中提供了另乙個方法onconstruct()
來執行初始化的邏輯:
public function onconstruct()
那麼,initialize()
和onconstruct()
的區別是什麼?執行順序又是怎樣的?
initialize()和onconstruct()對比
我們進行如下測試:
public function initialize()
public function onconstruct()
public function indexaction()
在瀏覽器中訪問http://localhost/index/index
可以看到執行順序是先onconstruct()
函式,後initialize()
函式。同時也通過列印當前物件$this
,看出這兩個函式的區別之處:
控制器中可通過如下方式接收瀏覽器傳送過來的資料:
public function test1action()");
var_dump("b:");
exit;
}
在瀏覽器中訪問http://localhost/index/test1?a=1&b=2
即可看到列印結果。這裡需要注意的是:
$this->request->get()
方法能同時獲取get
和post
請求的資料;
$this->request->getquery()
只能獲取get
方式的請求資料;
$this->request->getpost()
只能獲取post
方式的請求資料。
若想要url更加的優雅,我們可以嘗試使用如下方式來接收url引數:
public function test2action($a, $b='bb')");
var_dump("b:");
exit;
}
在瀏覽器中訪問以下兩種方式的url,看看列印結果是什麼? :)
在phalcon的路由匹配規則中,我們可以通過$dispatcher
來接收資料:
public function test3action()
'/index/test3/(\d+)/(\d+)' => array(
'module' => 'frontend',
'controller'=>'index',
'action'=>'test3',
'a' => 1,
'b' => 2,
),
在瀏覽器中訪問http://localhost/index/test3/111/222
即可看到列印的結果。
public function test6action()
在瀏覽器中訪問http://localhost/index/test6
即可看到ajax返回的json資料。
phalcon中提供了兩種頁面跳轉方式。
redirect()
public function test4action()
仔細觀察會發現瀏覽器中的url位址已經發生了變化。
forward()
public function test5action()
此種方式的頁面跳轉不會改變url位址,只是將請求**到另乙個控制器的action。
di中註冊的所有服務,在控制器中都可以直接呼叫:
public function test7action()
我們可以在這裡發散一下,在di中註冊我們的全域性配置物件:
$di -> setshared('config', function() use($config));
在控制器中直接呼叫($this->config
)即可。
以上**已託管在github:
Phalcon入門教程之模型
原文發表於 phalcon入門教程之模型phalcon提供了四種方式操作mysql資料庫 模型 phql 資料庫抽象層以及原生sql。不論何種方式,首先都需要在di中註冊db服務才能正常使用 di setshared db function use config connection new pha...
Phalcon入門教程之目錄結構
原文發表於 phalcon入門教程之目錄結構很多初學phalcon的朋友,對於以phalcon框架為基礎構建的專案,應該如何組織目錄結構有點摸不著頭腦。比如多模組的專案中,如何共用 libs 類庫和 models 目錄中模型類的情況,就有很多剛接觸phalcon朋友經常在群裡問這種問題。我們在翻閱p...
Phalcon入門教程之目錄結構
原文發表於 phalcon入門教程之目錄結構 很多初學phalcon的朋友,對於以phalcon框架為基礎構建的專案,應該如何組織目錄結構有點摸不著頭腦。比如多模組的專案中,如何共用 libs 類庫和 models 目錄中模型類的情況,就有很多剛接觸phalcon朋友經常在群裡問這種問題。我們在翻閱...