文字列でのメンバー関数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();
}