Phalcon入門教程之控制器

2021-09-17 04:20:23 字數 3215 閱讀 9570

原文發表於:

phalcon入門教程之控制器

控制器在mvc分層中的主要作用是處理請求與響應。phalcon中的控制器類必須以「controller」為字尾,action則以「action」為字尾。

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()方法能同時獲取getpost請求的資料;

$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朋友經常在群裡問這種問題。我們在翻閱...