cakePHP—可在执行任何控制器操作后调用的函数

cakePHP—可在执行任何控制器操作后调用的函数,php,cakephp,callback,Php,Cakephp,Callback,我需要一个可以在任何控制器方法执行后调用的函数 例如,beforeFilter()在执行任何控制器操作之前,总是调用应用程序控制器中的beforeFilter(),类似地,我需要类似于afterFilter()的东西 afterFilter()的问题是在控制器操作之前执行 我有一个控制器名TestController和一个动作test(),代码如下: TestController.php function test() { echo 'test';exit; } function af

我需要一个可以在任何控制器方法执行后调用的函数

例如,
beforeFilter()
在执行任何控制器操作之前,总是调用应用程序控制器中的
beforeFilter()
,类似地,我需要类似于
afterFilter()
的东西

afterFilter()
的问题是在控制器操作之前执行

我有一个控制器名
TestController
和一个动作
test()
,代码如下:

TestController.php

function test() {
    echo 'test';exit;
}
function afterFilter() {
    echo 'afterfilter';exit;
}
afterFilter()
中,我输入了以下代码:

AppController.php

function test() {
    echo 'test';exit;
}
function afterFilter() {
    echo 'afterfilter';exit;
}
然后只执行
afterFilter()

对上述行的评论如下:

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

TestController:test()
执行。因此,
afterFilter()
在控制器方法之前被调用。我需要一个在它之后被调用的函数,而不管控制器名称或操作名称。

我想你要搜索的是。

我想你要搜索的是。

根据:

Controller::afterFilter()

在每个控制器操作之后以及渲染完成之后调用。这是最后一个要运行的控制器方法

您的
AppController::afterFilter()
回调正在按预期工作。您可能认为它是在
TestController::test()
之前被调用的,因为您无法在浏览器上看到任何输出

试试这个:

function afterFilter() {
    echo 'afterfilter';
    echo $this->response;
    exit();
}
根据报告:

Controller::afterFilter()

在每个控制器操作之后以及渲染完成之后调用。这是最后一个要运行的控制器方法

您的
AppController::afterFilter()
回调正在按预期工作。您可能认为它是在
TestController::test()
之前被调用的,因为您无法在浏览器上看到任何输出

试试这个:

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

我在php中找到了
register\u shutdown\u function()
。这就是诀窍。

我在php中找到了
register\u shutdown\u function()
。这就是诀窍。

页面呈现两次,我想在页面呈现后执行一些代码,但我有一个问题,因为routes.php中未定义的URL没有通过AppController过滤器,您不应该调用
echo$this->response。这只是为了证明我的观点。无论您在
afterFilter()
中包含什么,都将是最后要执行的。是的,但是当我从afterFilter中回显某个内容时,它会在页面顶部回显,这意味着它会在页面呈现之前回显。不要混淆呈现视图和显示视图。视图已渲染,但未显示。如果您告诉我您在
afterFilter()
中想要实现什么,也许我可以提供一些提示。页面呈现两次,我想在页面呈现后执行一些代码。我有一个问题,对于routes.php中未定义的URL,没有通过AppController筛选器。您不应该调用
echo$this->response。这只是为了证明我的观点。无论您在
afterFilter()
中包含什么,都将是最后要执行的。是的,但是当我从afterFilter中回显某个内容时,它会在页面顶部回显,这意味着它会在页面呈现之前回显。不要混淆呈现视图和显示视图。视图已渲染,但未显示。如果您告诉我您在
afterFilter()
中想要实现什么,也许我可以提供一些提示。