Redirect CakePhp3从私有方法重定向
我对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 */
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等内部调用它。但我必须全部更改它们,这就是我试图避免的。谢谢。不是那么简单,但我会试试看。