2017-09-28 1 views
1

Je suis un débutant dans Symfony & ont perdu des heures dans ce problème.

J'essaie d'appeler une fonction isLoggedIn à partir d'une autre fonction de même classe. Dans la fonction isLoggedIn, je dois obtenir/vérifier une variable de session et renvoyer la valeur de cette variable. Mais l'objet Request $request n'est en quelque sorte pas accessible dans la fonction isLoggedIn, tandis que l'objet Request fonctionne bien dans d'autres fonctions de la même classe.

Mon code:

<?php 

namespace AppBundle\Controller; 

use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; 
use Symfony\Bundle\FrameworkBundle\Controller\Controller; 
use Symfony\Component\HttpFoundation\Request; 
use Symfony\Component\HttpFoundation\Session\Session; 
use AppBundle\Entity\Users; 

class DefaultController extends Controller 
{ 
    /** 
    * @Route("/", name="homepage") 
    */ 
    public function indexAction(Request $request) 
    { 
     $Authuser = $this->isLoggedIn(); 

     return $this->render('default/index.html.twig', [ 
      'base_dir' => realpath($this->getParameter('kernel.project_dir')).DIRECTORY_SEPARATOR, 
      'Authuser' => $Authuser 
     ]); 
    } 

    public function isLoggedIn(Request $request) ////GETTING ERROR IN THIS LINE//// 
    { 
     $session = $request->getSession(); 

     if($session->get('Authuser')!=null) $Authuser = $session->get('Authuser'); 
     else $Authuser = null; 

     return $Authuser; 
    } 

    /** 
    * @Route("/logout", name="logout") 
    */ 
    public function logoutAction(Request $request) 
    { 
     $session = $request->getSession(); 
     $session->remove('user_id'); 
     return $this->redirectToRoute('homepage'); 
    } 
} 

?> 

erreur exact que je reçois:

Uncaught PHP Exception Symfony\Component\Debug\Exception\ContextErrorException: "Catchable Fatal Error: Argument 1 passed to AppBundle\Controller\DefaultController::isLoggedIn() must be an instance of Symfony\Component\HttpFoundation\Request, none given, called in /Applications/MAMP/htdocs/srfood/src/AppBundle/Controller/DefaultController.php on line 21 and defined"

J'ai beaucoup cherché mais obtenir aucune solution, d'ailleurs je besoin de savoir ce que selon Symfony est différent dans isLoggedIn fonction des autres fonctions de même classe, parce que j'ai essayé d'ajouter une route à la fonction, en ajoutant le suffixe Action etc etc afin qu'il se comporte comme le reste des fonctions, mais je ne peux pas comprendre comment cette fonction est différente pour symfony ?! Merci! PS-J'utilise Symfony 3.3.

+1

$ Authuser = $ this-> isLoggedIn ($ request); devrait faire l'affaire bien que vous fassiez mieux d'utiliser l'ensemble de sécurité de Symfony. La raison pour laquelle les actions du contrôleur fonctionnent est que le framework dépense un effort supplémentaire pour analyser les actions et injecter des dépendances comme l'objet $ request. Les méthodes régulières telles que isLoggedIn mal nommé ne sont pas traitées. – Cerad

+0

@Cerad Merci! Oui, il a fait l'affaire et fonctionne de cette façon. Mais n'y a-t-il pas de solution appropriée si quelqu'un n'utilise pas le bundle de sécurité Symfony? Je suis un débutant, bien que j'aie essayé beaucoup mais le paquet de sécurité a volé au-dessus de ma tête, ne pourrait pas comprendre son utilisation correctement, donc d'une manière traditionnelle. – Echoes

+0

Votre approche va fonctionner. Le bundle de sécurité est complexe mais si vous suivez l'exemple dans les docs ce n'est pas trop mal. Surtout si vous finissez par vouloir utiliser des rôles et autres. – Cerad

Répondre

0

Vous ne pouvez pas déclarer les paramètres de demande pour les fonctions sans action dans le contrôleur. Essayez d'appeler isLoggedIn dans une action avec les paramètres $ request sans le déclarer dans la définition de la fonction.

Espérons que cela pourrait vous aider.

+0

Merci, bien que je l'ai résolu par l'astuce @Cerad suggéré dans son commentaire, à savoir, en passant $ request à l'appel de fonction, comme '$ Authuser = $ this-> isLoggedIn ($ request); ', ça fait le boulot. – Echoes