我需要一个可以在任何控制器方法执行后调用的函数。
例如,在执行任何控制器操作之前,始终会调用App控制器中的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 :(得分:2)
根据docs:
Controller::afterFilter()
在每个控制器操作后调用,并在渲染完成后调用。这是最后一个运行的控制器方法。
您的AppController::afterFilter()
回调按预期工作。您可能认为它在TestController::test()
之前被调用,因为您无法在浏览器上看到任何输出。
试试这个:
function afterFilter() {
echo 'afterfilter';
echo $this->response;
exit();
}
答案 1 :(得分:0)
我认为你要搜索的是dispatch filters。
答案 2 :(得分:0)
我在php中找到了register_shutdown_function()
。这就是诀窍。