CakePhp3从私有方法重定向

时间:2018-09-07 10:45:09

标签: redirect cakephp controller

我在 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 * /

将用户重定向到其他网址?

使用:

返回$ this-> redirect($ url);

内部initData(当然)不起作用,我想不处理每个动作中的重定向。

1 个答案:

答案 0 :(得分:0)

目前尚无内置支持。简单地实现这一点应该足够简单,例如,您可以覆盖Controller::invokeAction()来捕获重定向异常,并使其相应地返回重定向响应,例如:

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
        );
    }
}