重定向到同一控制器中的操作不起作用 - CakePHP 3.x

时间:2018-03-20 10:09:56

标签: cakephp cakephp-3.0

CakePHP 3.5.13

根据documentation

  

如果需要将当前操作转发到同一控制器上的其他操作,则可以使用Controller::setAction()更新请求对象,修改将呈现的视图模板并将执行转发到指定的操作:

// From a delete action, you can render the updated
// list page.
$this->setAction('index');

但这似乎不起作用。

例如,在我的控制器中,我有2个函数,index()apply_filters()。我希望在执行index()后将用户重定向回apply_filters()

所以我做到了这一点:

public function apply_filters()
{
    $this->autoRender = false;

    // code for applying filters
    $this->setAction('index');
}

public function index()
{
    debug('index');
}

apply_filters()没有视图,因此$this->autoRender = false;

当用户在网址/apply-filters上时,它只会停留在那里而不会重定向回index()

如果我用$this->setAction('index')

替换return $this->redirect(['controller' => 'Front', 'action' => 'index']); ,它的效果绝对正常

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

转发(内部重定向) HTTP重定向不同。

这两种方法做了两件不同的事情,一种是按照描述转发呼叫,以转发呼叫的动作改变应用程序状态,认为它是被调用的那个,并且另一个创建HTTP重定向响应。

如果你想要后者,那么redirect()就是你要找的,而不是setAction()

另见