Wywołanie funkcji składowej redirect () w łańcuchu - Yii2 v2.0.36
Nov 21 2020
Kiedy próbuję przekierować do adresu URL z funkcji init () mojego kontrolera, pojawia się ten komunikat Call to a member function redirect () on string .
public function init()
{
$someCondition = myBoolFunction(); if ($someCondition) {
return $this->redirect('my/url'));
}
parent::init();
}
Odpowiedzi
4 rob006 Nov 21 2020 at 16:01
Musisz zadzwonić $this->redirect()
po parent::init()
, ponieważ $response
właściwość (używana przez $this->redirect()
) jest tam inicjalizowana .
public function init() {
parent::init();
$someCondition = myBoolFunction();
if ($someCondition) { return $this->redirect('my/url'));
}
}
Ale generalnie init()
nie jest to dobre miejsce na takie przekierowanie (prawdopodobnie nawet nie zadziała, ponieważ init()
nie powinno nic zwracać, więc twoje przekierowanie może zostać zignorowane), powinieneś użyć beforeAction()
zamiast tego. Tutaj możesz zobaczyć, jak skonfigurować odpowiedź wbeforeAction() , po prostu zastąp asJson()
swoim przekierowaniem:
public function beforeAction() {
parent::init();
$someCondition = myBoolFunction(); if ($someCondition) {
$this->redirect('my/url'));
return false;
}
return parent::beforeAction();
}