Redirect CakePhp3从私有方法重定向

Redirect CakePhp3从私有方法重定向,redirect,cakephp,controller,Redirect,Cakephp,Controller,我对CakePhp3有以下问题: 在我的控制器中,我希望执行以下操作: class MyController extends Controller { public function myAction1(){ $this->initData(); /* more code here */ } public function myAction2(){ $this->initData(); /* more code here */

我对CakePhp3有以下问题:

在我的控制器中,我希望执行以下操作:

class MyController extends Controller
{ 

   public function myAction1(){
    $this->initData();
    /* more code here */
   }

   public function myAction2(){
    $this->initData();
    /* more code here */
   }

   public function myAction3(){
    $this->initData();
    /* more code here */
   }

   /* more actions here */


   private function initData(){
    if ($this->validData()){
     /* complex code to initalize data */
    }else{
     /* REDIRECT TO FAIL URL */
    }
   }

   private function validData(){

     /* complex code to validate data */
     return $valid;

   }

}
我的问题是:

我应该使用什么代码来代替

/*重定向到失败URL*/

要将用户重定向到其他url

使用:

返回$this->redirect($url)


InInside initData(当然)不起作用,我不想在每个操作中处理重定向。

目前还没有内置的支持。它应该足够简单,可以自己实现,例如,您可以覆盖以捕获重定向异常,并使其相应地返回重定向响应,例如:

public function invokeAction()
{
    try {
        return parent::invokeAction();
    } catch (\Cake\Routing\Exception\RedirectException $exception) {
        return $this->redirect($exception->getMessage(), $exception->getCode());
    }
}

private function initData()
{
    if ($this->validData()) {
        // ....
    } else {
        throw new \Cake\Routing\Exception\RedirectException(
            \Cake\Routing\Router::url([/* ... */]), // redirect URL
            302 // HTTP status code
        );
    }
}

$this->redirect()在CakePHP3.6$this->initData()中对我有效。它不起作用,因为在initData中返回$this->redirect($url)只会将响应对象返回给myAction1、myAction2等。它可以从myAction1、myAction2等内部调用它。但我必须全部更改它们,这就是我试图避免的。谢谢。不是那么简单,但我会试试看。