Appel à une fonction membre redirect () sur chaîne - Yii2 v2.0.36

Nov 21 2020

Lorsque j'essaie de rediriger vers l'URL de la fonction init () de mon contrôleur, j'obtiens ce message Appel à une fonction membre redirect () sur string .

public function init()
{
    $someCondition = myBoolFunction(); if ($someCondition) {
        return $this->redirect('my/url'));
    }

    parent::init();
}

Réponses

4 rob006 Nov 21 2020 at 16:01

Vous devez appeler $this->redirect() après parent::init() , car la $responsepropriété (utilisée par $this->redirect()) y est initialisée .

public function init() {
    parent::init();

    $someCondition = myBoolFunction();
    if ($someCondition) { return $this->redirect('my/url'));
    }
}

Mais en général, ce init()n'est pas un bon endroit pour faire une telle redirection (cela ne fonctionnera probablement même pas, car init()ne devrait rien renvoyer, donc votre redirection peut être ignorée), vous devriez utiliser à la beforeAction()place. Ici, vous pouvez voir comment configurer la réponse dansbeforeAction() , remplacez simplement asJson()par votre redirection:

public function beforeAction() {
    parent::init();

    $someCondition = myBoolFunction(); if ($someCondition) {
        $this->redirect('my/url'));
        return false;
    }

    return parent::beforeAction();
}