文字列でのメンバー関数redirect()の呼び出し-Yii2 v2.0.36
Nov 21 2020
コントローラのinit()関数からurlにリダイレクトしようとすると、次のメッセージが表示されます。文字列のメンバー関数redirect()を呼び出します。
public function init()
{
$someCondition = myBoolFunction(); if ($someCondition) {
return $this->redirect('my/url'));
}
parent::init();
}
回答
4 rob006 Nov 21 2020 at 16:01
プロパティ(によって使用される)はそこで初期化されるため、の$this->redirect()
後 に呼び出す必要があります。parent::init()
$response
$this->redirect()
public function init() {
parent::init();
$someCondition = myBoolFunction();
if ($someCondition) { return $this->redirect('my/url'));
}
}
ただし、一般にinit()
、このようなリダイレクトを行うのに適した場所ではありません(init()
何も返さないため、リダイレクトが無視される可能性があるため、おそらく機能しません)beforeAction()
。代わりに使用する必要があります。ここではbeforeAction()、で応答を構成する方法を確認できasJson()
ます。リダイレクトに置き換えるだけです。
public function beforeAction() {
parent::init();
$someCondition = myBoolFunction(); if ($someCondition) {
$this->redirect('my/url'));
return false;
}
return parent::beforeAction();
}