2011-07-14 160 views
0

我想在我的網站的每個頁面中包含一個小代碼。 有沒有辦法做到這一點,而無需修改每個控制器?與app_controller相關的問題

例如 - 我想從Message模型讀取/未讀消息。

我可以使用app_controller來做到這一點嗎?我在app_controller.php中添加了以下功能。 我需要建議。請幫幫我。

function messageStatus() { 
    App::import('Model','Message'); 
    $new_message = $this->Message->find(
    'first', 
      array (
       'conditions' => array (
        'Message.status' => '1' 
       ) 
      ) 
     ); 
    $this->set("new_message",$new_message); 
} 

回答

1

根據當您要執行你的行動,你將在app_controller.php文件的以下功能(according to the documentation)一個覆蓋,:

beforeFilter() 
afterFilter() 
beforeRender() 

由於您的所有其他控制器會繼承這個類的方法,你的動作將會每次被執行(在docs中指定)你的一個控制器被執行。

如果您想讓控制器不運行app_controller中的代碼,只需在本地再次覆蓋該方法即可。

0

正如user559744提到的,您可以在您的應用程序中使用AppController來創建控制器可以訪問的屬性和方法。 AppController是控制器的父類。

您應該將/ cake/libs/controller /中的app_controller.php複製到YOURAPP/app_controller.php以避免更改核心文件。

http://book.cakephp.org/view/957/The-App-Controller