代码之家  ›  专栏  ›  技术社区  ›  Franz

CakePhp3从私有方法重定向

  •  0
  • Franz  · 技术社区  · 6 年前

    我有这个问题 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->重定向($url);

    1 回复  |  直到 6 年前
        1
  •  0
  •   ndm    6 年前

    目前还没有内置的支持。它应该很简单,可以自己实现,例如覆盖 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
            );
        }
    }