在我们的CakePHP 3应用程序中,我们发现了不同的行为。我们确信它在CakePHP 2中运行良好,所以我想在新版本中有所改变。
当用户访问此网址:/b2controller/myMethod
时,这些方法会运行:
AppController::beforeFilter()
BController::beforeFilter()
B2Controller::beforeFilter()
B2Controller::myMethod()
B2Controller::myMethod2()
然后用户被重定向到此网址/ccontroller/myMethod10/
但我们需要这个:
用户访问时
/b2controller/myMethod
和$isOk
条件为true
,然后将用户重定向到/ccontroller/myMethod10/
,而不会运行BController::beforeFilter()
,B2Controller::beforeFilter()
,B2Controller::myMethod()
和{ {1}}。
我们的最小代码是这样的:
BController::MyMethod2()
如何让用户从主类的beforeFilter重定向到另一个控制器操作?请注意,重定向发生。但是在调用class AppController {
function beforeFilter(Event $event) {
// set $isOk variable
if ($isOk == TRUE) {
return $this->redirect('/ccontroller/myMethod10/');
}
$aa=1;
$ab=2;
}
}
class BController extends AppController {
function beforeFilter(Event $event) {
parent::beforeFilter($event);
$a=1;
$b=2;
}
function myOtherMethod() {
myOtherMethod2();
}
function myOtherMethod2() {
...
...
}
}
class B2Controller extends BController {
function beforeFilter(Event $event) {
parent::beforeFilter($event);
$m1=1;
$m2=2;
}
function myMethod() {
myMethod2();
}
function myMethod2() {
...
...
}
}
class CController extends AppController {
function beforeFilter(Event $event) {
parent::beforeFilter($event);
}
function myMethod10() {
...
...
...
}
}
和myMethod()
后,用户会被重定向。
另请注意,还有其他控制器,如myMethod2()
,它们使用beforeFilter重定向行为。