Symfony 2 appelle une fonction dans une méthode de Controller

j'ai une méthode dans un contrôleur de dire comme ça. En fait, je suis dans le besoin de déclarer une fonction checkLogin de sorte que je puisse utiliser dans plusieurs Méthode de contrôleur comme ci-dessous:

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

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

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

Dans le cas ci-dessus, quand je fais comme ça, j'obtiens l'erreur suivante:

erreur fatale: appel à une fonction non définie NouPeiWebSiteBundleControllercheckLogin () in /home/noor/noupei/website/WebSiteBundle/Controller/DefaultController.php on line 142

8
demandé sur Noor 2012-01-24 15:55:22

4 réponses

C'est une méthode, pas une fonction:

if (self::checkLogin()){}
23
répondu meze 2012-01-24 12:22:38

vous pouvez appeler la fonction comme ceci :

$this->checkLogin();
17
répondu Chopchop 2012-01-24 14:25:29

pour la gestion des comptes dans Symfony 2, vous devez utiliser la gestion de la sécurité de symfony 2 (ici). Vous serez en mesure de vérifier la connexion de l'utilisateur comme ceci :

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
}

Source

si vous ne voulez pas utiliser Symfony 2 security management, vous devez utiliser services rendre les méthodes disponibles pour chaque contrôleur.

5
répondu BlackCharly 2012-01-24 12:06:43

Il y a plusieurs façons de faire cela:

  1. Utilisez le pare-feu fourni par Symfony. Vous pouvez le configurer dans app/config/security.yml en vertu de l' access_control: - { path: ^/anyurl-forme/pattern$, rôle: ROLE_USER }

    en utilisant cette méthode: symfony sera celui qui vérifiera la validité de la session. et si la session n'est pas valide, il sera rediriger automatiquement l'utilisateur vers la page de connexion et un utilisateur non authentifié ne jamais être en mesure de visiter ces pages sinon loggedin.

    implémenter cette méthode a plusieurs options avant qu'elle ne fonctionne. Vous pourriez avoir besoin de créer votre propre fournisseur ou utiliser et existant un je recommande FOSUserBundle. Cette série a une variété sur la façon de gérer l'utilisateur. Une autre option est de créer votre propre Fournisseur si vous voulez valider extérieurement spécialement lorsque vous utilisez des api (SOA) à vérifier l'authenticité de la utilisateur.

  2. Si vous souhaitez ajouter une méthode qui sera utilisée pour tous les Contrôleur. C'est soit vous créez une classe qui étend le contrôleur de Symfony:

    contrôleur de classe BaseController étend le contrôleur { liste de contrôle des fonctions protégées(){} }

    classe DefaultController extends BaseController { fonction publique testAction() { $ loggedIn = $ this - > checkLogin(); } }

Ou vous pouvez créer un trait et l'inclure dans votre Contrôleur.

trait ControllerTrait
{
   protected function checkLogin(){}
}

class DefaultController extends BaseController
{
      use ControllerTrait;

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

mais je recommande fortement d'utiliser le pare-feu à des fins de sécurité et il offre beaucoup de fonctionnalité et de vérification de sécurité.

1
répondu Francis Alvin 2014-03-07 07:35:43