2013-07-26 112 views
9

我是cakephp的新手。我發現一個很常用的方法Cakephp beforeFilter vs構造函數

beforeFilter() 

我的問題是,它是如何不同於一個類的構造函數? 如果我叫

parent::beforeFilter(); 

從構造函數,而不是beforeFilter(); 我只是想知道如果我在

public function __construct() { 
    // Code here 
} 

,而不是

public function beforeFilter() { 
} 

感謝

回答

4

construct()用於構造,加載需要的東西。

__construct()公共 構造

參數: ComponentCollection $收集 一個ComponentCollection這個組件可以使用延遲加載及其組件

http://api.cakephp.org/2.3/class-Component.html#___construct


beforeFilter( ) 執行s功能

Controller :: beforeFilter() 該函數在控制器中的每個動作之前執行。這是檢查活動會話或檢查用戶權限的便利場所。

http://api.cakephp.org/2.3/class-Controller.html#_beforeFilter

控制器動作前調用。您可以使用此方法來配置和自定義組件,或在每個控制器操作之前執行需要發生的邏輯。

注意: beforeFilter()方法將針對缺失操作和腳手架操作進行調用。

http://book.cakephp.org/2.0/en/controllers.html#request-life-cycle-callbacks

通常你不會需要一個構造函數,以下CakePHP的約定時,只有極少數的情況下,您確實沒有其他選擇,而不是「強制」裝載的東西手動...

+0

我不同意的權限,這是什麼isAuthorized()回調被認爲對。 – burzum

+0

@burzum你是說你與官方不同意CakePHP文檔?他們說「這是一個方便的地方來檢查活動會話或檢查用戶權限。」您可以檢查beforeFilted()方法的權限,並基於此,確定您想要在視圖中顯示的內容,更正?我不確定我們是否在談論相同的事情,或者你是在談論其他事情。 –

+0

是的,我這樣做。這句話有點誤導,應該指向Auth組件,它是isAuthorized()回調。請提供有關在何處以及如何實施授權檢查的更好建議。但是,這是一箇舊版本,我懶得更新文檔。我已經爲Cake3重寫了Authentication(https://github.com/cakephp/authentication),這將使它進入下一個版本,並且我正在爲稍後的3.x版本或4.0進入Authorization層的計劃階段,這將具有更好的抽象和基於策略的實現。想法是受歡迎的。 – burzum

4

寫相同的代碼只是閱讀方法的描述在控制類:

在控制器操作之前調用。您可以使用此方法來配置和自定義組件,或執行需要在每個控制器操作之前發生的邏輯 。

BeforeFilter由調度時,URL訪問調用,並觸發控制器的動作:

  1. 構造
  2. BeforeFilter
  3. 行動
  4. BeforeRender
  5. 後過濾

很少有一個案例(至少我不記得),我不得不在構造函數中做一些事情。這也是一個很好的建築設計。構造函數只是初始化了一些東西,而beforeFilter允許你配置(主要是組件),例如之前初始化的東西。