2016-01-14 26 views
0

我需要一個可以在任何控制器方法執行後調用的函數。cakePHP - 可以在執行任何控制器動作後調用的函數

例子中,beforeFilter()在應用程序控制器中總是在執行任何控制器動作之前調用,同樣我需要類似afterFilter()之類的東西。

afterFilter()的問題是在控制器操作之前執行的問題。

我有一個控制器名稱TestController和行動test(),用下面的代碼:

TestController.php

function test() { 
    echo 'test';exit; 
} 

而且裏面afterFilter()我把這個代碼:

的AppController .php

function afterFilter() { 
    echo 'afterfilter';exit; 
} 

然後只有afterFilter()執行。

在註釋上面的行,如下所示:

function afterFilter() { 
    //echo 'afterfilter';exit; 
} 

TestController:test()執行。所以afterFilter()在控制器方法之前被調用。我需要一個在它後面調用的函數,而不管控制器名稱或操作名稱如何。

回答

0

我在PHP中發現register_shutdown_function()。這就是訣竅。

2

按照docs

Controller::afterFilter()

每個控制器動作後調用和渲染完成後。這是最後一個要運行的控制器方法。

您的AppController::afterFilter()回調按預期工作。您可能會認爲它在TestController::test()之前被調用,因爲您無法在瀏覽器上看到任何輸出。

試試這個:

function afterFilter() { 
    echo 'afterfilter'; 
    echo $this->response; 
    exit(); 
} 
+0

請詳細說明。 –

+0

該頁面呈現兩次,我想在頁面呈現後執行一些代碼 – user1735921

+0

而我有一個問題,因爲沒有在routes.php中定義的url,無法通過AppController過濾器 – user1735921

相關問題