9 Stimmen

Symfony 2 Aufruf einer Funktion in einer Controller-Methode

Ich habe eine Methode in einem Controller, die so aussieht. In der Tat, ich bin in der Notwendigkeit, eine Funktion zu deklarieren checkLogin, so dass ich in mehreren Controller-Methode wie unten verwenden können:

class DefaultController extends Controller
{
 /**
     * @Route("/test")
     * @Template()
     */
    public function testAction()
    {

        if (checkLogin()){}
            else {}
        exit;
    }

    public static function checkLogin()
    {
        return 1;
    }
}

Im obigen Fall erhalte ich, wenn ich es so mache, folgende Fehlermeldung:

Fataler Fehler: Aufruf einer undefinierten Funktion NouPei \WebSiteBundle\Controller\checkLogin () in /home/noor/noupei/website/WebSiteBundle/Controller/DefaultController.php auf Zeile 142

28voto

meze Punkte 14706

Es handelt sich um eine Methode, nicht um eine Funktion:

if (self::checkLogin()){}

18voto

Chopchop Punkte 2879

Können Sie die Funktion wie folgt aufrufen:

$this->checkLogin();

5voto

BlackCharly Punkte 649

Für die Account-Verwaltung in Symfony 2 sollten Sie die Sicherheitsverwaltung von Symfony 2 verwenden ( aquí ). Sie können die Benutzeranmeldung wie folgt überprüfen:

public function indexAction()
{
    // show different content to admin users
    if ($this->get('security.context')->isGranted('ADMIN')) {
        // Load admin content here
    }
    // load other regular content here
}

Fuente

Wenn Sie das Sicherheitsmanagement von Symfony 2 nicht verwenden wollen, sollten Sie Dienstleistungen um Methoden für jeden Controller verfügbar zu machen.

2voto

Francis Punkte 672

Es gibt mehrere Möglichkeiten, dies zu tun:

  1. Verwenden Sie die von Symfony bereitgestellte Firewall. Sie können sie in app/config/security.yml konfigurieren unter der access_control: - { Pfad: ^/anyurl-form/pattern$, role: ROLE_USER }

    mit dieser Methode: symfony ist derjenige, der die Gültigkeit der Sitzung überprüft. Wenn die Sitzung ungültig ist, wird der Benutzer automatisch auf die Anmeldeseite umgeleitet und ein nicht authentifizierter Benutzer kann diese Seiten niemals besuchen, wenn er nicht angemeldet ist.

    Auch für die Umsetzung dieser Methode gibt es mehrere Optionen, bevor sie funktionieren kann. Möglicherweise müssen Sie Ihren eigenen Provider erstellen oder einen vorhandenen Provider verwenden, den ich empfehle FOSUserBundle . Dieses Paket bietet eine Vielzahl von Möglichkeiten, den Benutzer zu verwalten. Eine weitere Option ist die Erstellung einer eigenen Anbieter wenn Sie extern validieren wollen, insbesondere wenn Sie Api's verwenden (SOA) um die Authentizität des Benutzers zu überprüfen.

  2. Wenn Sie eine Methode hinzufügen möchten, die für alle Controller verwendet wird. Entweder Sie erstellen eine Klasse, die Symfony's Controller erweitert:

    class BaseController extends Controller { protected function checkLogin(){} }

    class DefaultController erweitert BaseController { public function testAction() { $loggedIn = $this->checkLogin(); } }

Sie können auch eine Eigenschaft erstellen und in Ihren Controller aufnehmen.

trait ControllerTrait
{
   protected function checkLogin(){}
}

class DefaultController extends BaseController
{
      use ControllerTrait;

      public function testAction() 
      {
        $loggedIn = $this->checkLogin();
      }
}

Ich empfehle jedoch dringend, die Firewall aus Sicherheitsgründen zu verwenden, denn sie bietet eine Vielzahl von Funktionen und Sicherheitsüberprüfungen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X