CakePhp3 редирект из частного метода - PullRequest
0 голосов
/ 07 сентября 2018

У меня есть эта проблема с 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 * /

чтобы перенаправить пользователя на другой URL?

Использование:

return $ this-> redirect ($ url);

внутри initData (ofcourse) не работает, и я не хотел бы обрабатывать перенаправление внутри каждого действия.

1 Ответ

0 голосов
/ 07 сентября 2018

Нет встроенной поддержки для этого (пока). Это должно быть достаточно просто, чтобы реализовать это самостоятельно, например, вы можете переписать 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
        );
    }
}
...