2017-05-01 2 views
0

Ich habe eine yii \ bootstrap \ Nav, wo ich mehrere Menüpunkte haben. Einer von ihnen ist das Abmelden. Betrachten Sie diese zwei Beispiele.Yii 2 Nav Widget sichtbar vs zugänglich

$menuItems = [ 
      [ 
       'label' => 'Logout ('. Yii::$app->user->identity->username. ')', 
       'url'  => ['/site/logout'], 
       'linkOptions' => ['data-method' => 'post'], 
       'visible' => !Yii::$app->user->isGuest, 
      ], 
    ] 

vs

if (!Yii::$app->user->isGuest) { 
     $menuItems[] = 
       [ 
        'label' => 'Logout ('. Yii::$app->user->identity->username. ')', 
        'url'  => ['/site/logout'], 
        'linkOptions' => ['data-method' => 'post'], 
       ]; 

} 

Meine Anwendung stürzt mit dem Fehler für die

Trying to get property of non-object 

auf der Linie mit Yii :: app $> user-> identitäts> Benutzernamen ein. Ich benutze die zweite Lösung, die gut funktioniert, aber können Sie erklären, warum der Code unter Umgehung der 'sichtbaren' Parameter für den ersten Block ausgeführt wird.

+0

Was passiert, wenn Sie 'setzen false' statt'! Yii :: app $> Benutzer -> isGuest'? – gmc

+0

Ich bekomme den gleichen Fehler, es scheint, dass selbst wenn es nicht sichtbar ist, es immer noch ausgeführt wird. Wenn kein Benutzer angemeldet ist, wird eine Ausnahme ausgelöst. – user3410843

Antwort

1

Im zweiten Fall, dass Sie nicht Gast überprüfen und dies bedeuten, dass

Yii::$app->user 

eine korrekte objecy ist und dann können Sie

in erster Sie nur das menuitem dieses Attribut sichtbar verwenden, um Benutzernamen zugreifen wie in doc beschrieben bedeuten

http://www.yiiframework.com/doc-2.0/yii-widgets-menu.html# $ Artikel-Detail

Sichtbar: boolesch, optional, ob dieser Menüpunkt sichtbar ist. Der Standardwert ist wahr.

Dies bedeutet, dass dieses Attribut das Ausblenden oder Anzeigen des Menüelements verwaltet. Aber in diesem Fall bleibt der Code für Benutzer denselben so basierte auf Tatsache, dass ein Gast nicht Kiste ein richtiges Benutzerobjekt Sie die rror für accessi einer propert ofr eines Null-Objekt haben

+0

Diskutieren Sie den ersten Fall: Wenn der Menüpunkt nicht sichtbar ist, warum kümmert es sich um die Existenz des Yii :: $ app-> Benutzers? – user3410843

+1

der Code wird auch ausgeführt, wenn das Menü nicht sichtbar ist .. .. Insbesondere die Zeile .. 'Label' => 'Abmelden ('. Yii :: $ app-> Benutzer-> Identität-> Benutzername. ')' , Wird ausgeführt, um die Bezeichnung des Artikels zu bestimmen .. auch wenn es nicht angezeigt wird .... hoffe, ist klar .. – scaisEdge

0

In Ihrem ersten Codeblock

Yii::$app->user->identity->username

Änderung es

(Yii::$app->user)?("Logout(".(Yii::$app->user->identity->username.")"):'Login'

HINWEIS: Änderung url entsprechend. Sichtbarkeit ist nicht erforderlich, um zu konfigurieren.

Wenn kein Login Benutzer Yii::$app->user->identity->username Anweisung nicht username zurückkehren können, weil es keine Identität existieren Benutzer (Yii::$app->user->identity ist null)

Verwandte Themen