문자열에서 멤버 함수 redirect () 호출-Yii2 v2.0.36

Nov 21 2020

컨트롤러의 init () 함수에서 url로 리디렉션하려고하면이 메시지 Call to a member function redirect () on string이 표시 됩니다.

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();
}