我在 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(当然)不起作用,我想不处理每个动作中的重定向。
答案 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
);
}
}