2017-05-03 5 views
2

Ich habe das Problem mit der Rückkehr zur vorherigen Seite, werde sehr dankbar sein, wenn einige mir helfen. Dies ist mein Controller meldet sich

public function actionLogin() { 
     $this->layout = 'login'; 
     if (!\Yii::$app->user->isGuest) { 
      return $this->goHome(); 
     } 
     $model = new LoginForm(); 
     if ($model->load(Yii::$app->request->post()) && $model->login()) { 
      return $this->goBack(); 
     } else { 
      return $this->render('login', [ 
         'model' => $model, 
      ]); 
     } 
} 

, wenn ich den Benutzernamen und das Passwort alle Dinge eingeben geht richtig, aber der Benutzer Aufenthalt in derselben Seite (Login-Seite.). Ich versuche auch, eine andere Ansicht zu rendern oder es zu einer Aktion umzuleiten, aber es funktioniert nicht. Wenn ich etwas vor der goBack() - Funktion stimme, funktioniert es gut, was bedeutet, dass sich der Benutzer anmeldet.

+0

Werfen Sie einen Blick auf die doc: http://www.yiiframework.com/doc-2.0/yii-web-controller.html#goBack()-detail Die URL festgelegt werden muss, bevor 'zu lassen goBack() 'weiß wo ich hingehen soll. – robsch

+0

kannst du bitte in welcher Datei angeben und wie man returnUrl setzt ??? – Dani

Antwort

0

Sie könnten

return $this->redirect(Yii::$app->request->referrer); 


return $this->goBack((
     !empty(Yii::$app->request->referrer) ? Yii::$app->request->referrer : null 
)); 

oder

if(Yii::$app->request->referrer){ 
    return $this->redirect(Yii::$app->request->referrer); 
}else{ 
    return $this->goHome(); 
} 
+0

immer noch das gleiche Problem – Dani

+0

Antwort aktualisiert .. – scaisEdge

1

Sie können jede Aktion aufgerufen erinnern verwenden, nachdem die Aktion ausgeführt wurde. Dies kann mit setReturnUrl() am Benutzerobjekt erfolgen (Hinweis: Das Benutzerobjekt ist auch für einen anonymen Benutzer vorhanden). Wenn dies geschehen ist, funktioniert wie erwartet.

Der Ort, an dem Sie anrufen setReturnUrl() ist in der afterAction event. Sie können dies in der Anwendungskonfiguration (z. B. web.php) implementieren. Es sieht wie folgt aus:

$config = [ 
    'id'    => 'foo-app', 
    'basePath'  => dirname(__DIR__), 
    'params'   => ... 
    'bootstrap'  => ['log'], 
    'components'  => ..., 

    'on afterAction' => function (yii\base\ActionEvent $e) { 
     if($e->action->id !== 'login' && $e->action->controller->id !== 'site') 
      Yii::$app->user->setReturnUrl(Yii::$app->request->url); 
    }, 
]; 

'on afterAction' jedes Mal aufgerufen wurde eine Aktion aufgerufen wird. In Yii::$app->request->url enthält die letzte (derzeit) vollständige URL.

Ich habe die if-Anweisung hinzugefügt, damit die URL mit Site/Login nicht gespeichert wird, da dies keine Seite ist, zu der Sie zurückkehren möchten.

Ich habe dies nicht getestet. Ich hoffe, es funktioniert. Nach this discussion mit Yii::$app->request->referrer ist nicht zuverlässig.

Gefunden auch einige Informationen here.

+0

immer noch das gleiche Problem – Dani

+0

@Dani Haben Sie einige andere besondere Dinge? Eine AccessControl-Implementierung/Verwendung oder eine abgeleitete Benutzerklasse? Der Standard-Login-Prozess in yii2-app-advanced oder yii2-app-basic sollte, soweit ich weiß, bereits standardmäßig das gewünschte Verhalten aufweisen. Und wie wird Site/Login aufgerufen? – robsch

+0

Sory für meine späte Rply Ich habe das Login-System von yii2 verbesserte Version zu implementieren. Ich habe immer noch das gleiche Problem bitte helfen Sie mir, es ist so dringend danke – Dani

0

Sie müssen Ihr Benutzer/Login-Modell in Config zuweisen Öffnen Sie web.php und fügen Sie Ihr Login/Benutzermodell zum Beispiel.

'user' => [ 
     'identityClass' => 'app\models\Users', 
     'enableAutoLogin' => true, 
    ],