Ich habe eine Methode in einem Controller sagen so. In der Tat muss ich eine Funktion checkLogin deklarieren, so dass ich in mehreren Controller-Methode wie folgt verwenden kann:
%Vor%In dem obigen Fall, wenn ich es so mache, bekomme ich den folgenden Fehler:
Schwerwiegender Fehler: Rufen Sie die nicht definierte Funktion NouPei \ WebSiteBundle \ Controller \ checkLogin () in /home/noor/noupei/website/WebSiteBundle/Controller/DefaultController.php in Zeile 142
aufFür die Kontoverwaltung in Symfony 2 sollten Sie das Sicherheitsmanagement von Symfony 2 verwenden ( hier ). Sie können die Benutzeranmeldung wie folgt überprüfen:
%Vor%Wenn Sie die Symfony 2-Sicherheitsverwaltung nicht verwenden möchten, sollten Sie die Dienste verwenden Methoden für jeden Controller verfügbar.
Es gibt mehrere Möglichkeiten, dies zu tun:
Verwenden Sie die von Symfony bereitgestellte Firewall. Sie können es in app / config / security.yml konfigurieren unter access_control: - {Pfad: ^ / anyurl-form / Muster $, Rolle: ROLE_USER}
mit dieser Methode: Symfony wird die Gültigkeit der Sitzung überprüfen. Wenn die Sitzung ungültig ist, wird der Benutzer automatisch zur Anmeldeseite umgeleitet, und ein nicht authentifizierter Benutzer kann diese Seiten nie aufrufen, wenn er nicht angemeldet ist.
Die Implementierung dieser Methode hat mehrere Optionen, bevor sie funktioniert. Möglicherweise müssen Sie einen eigenen Provider erstellen oder einen bestehenden verwenden. Ich empfehle FOSUserBundle . Dieses Bundle bietet verschiedene Möglichkeiten, den Benutzer zu verwalten. Eine weitere Option ist die Erstellung eines eigenen Anbieters , wenn Sie extern speziell validieren möchten, wenn Sie api's
Wenn Sie eine Methode hinzufügen möchten, die für alle Controller verwendet wird. Entweder Sie erstellen eine Klasse, die den Symfony-Controller erweitert:
Klasse BaseController erweitert Controller { geschützte Funktion checkLogin () {} }
class DefaultController erweitert BaseController { öffentliche Funktion testAction () { $ loggedIn = $ this- & gt; checkLogin (); } }
Oder Sie können ein Merkmal erstellen und es in Ihren Controller einfügen.
%Vor%Aber ich empfehle dringend, die Firewall für Sicherheitszwecke zu verwenden und bietet eine Menge Funktionalität und Sicherheitsprüfung.
Tags und Links symfony