2017-04-16 1 views
0

S'il vous plaît, je suis nouveau à symfony, je n'arrive pas à faire ce travail. J'ai créé un service simple qui va vérifier si le statut de l'utilisateur est actif ou supprimé, et si c'est le cas, déconnectez-les de l'application. J'ai créé le code qui fonctionne, et puis je voulais être un badass et créer un service qui va le faire. Mais non. Donc, j'ai créé un service et il imprime le résultat, donc c'est enregistré et ça marche. Le problème est que je suppose que je ne peux pas approcher les mêmes variables que j'ai fait dans les contrôleurs de ma classe de service. Voici le code:Passe rendu à mon nouveau service créé - Symfony

<?php 

namespace WebBundle\Roles; 

class Roles 
{ 

public function getApplicationId($loggedUser, $request) 
{ 
    // Get the current user role 
    /** @var $userRole array */ 
    $userRole = $loggedUser->getRoles(); 

    // Check if the user role is super admin or admin - client 
    /** @var $superAdmin bool */ 
    $superAdmin = in_array('ROLE_SUPER_ADMIN', $userRole) ? true : false; 
    $admin = in_array('ROLE_ADMIN', $userRole) ? true : false; 
    if ($superAdmin) { 
     /** @var $application int */ 
     $application = $request->get('application'); 
    } elseif ($admin) { 
     /** @var $application int */ 
     $application = $loggedUser->getAppClient()->getId(); 
    } 
    return $application; 
} 

public function logoutInactiveAndDeletedUsers($loggedUser) 
{ 
    // Log out inactive or deleted users. 
    if ($loggedUser->getStatus()->getStatus() == 'inactive' || $loggedUser->getStatus()->getStatus() == 'deleted') { 

     //$this->get('security.context')->setToken(null); 
     //var_dump('test');exit; 
     return $this->container->render('WebBundle:Default:login.html.twig', array('last_username' => null, 'error' => null,)); 
    } 
} 
} 

Ainsi, ce premier service getApplicationId fonctionne correctement. Mais l'autre me cause de vrais problèmes. Ainsi, le serivce se brise quand je l'appelle à la fois:

$this->get('security.context')->setToken(null); 

et

return $this->container->render('WebBundle:Default:login.html.twig', array('last_username' => null, 'error' => null,)); 

Mais si je mets ce code dans le contrôleur, il fonctionne parfaitement. Il détruit le jeton et redirige l'utilisateur vers la page de connexion. S'il vous plaît, aidez-moi à comprendre comment le faire fonctionner en tant que service.

Répondre

0

Ok, je savoir comment appeler une vue:

En services.yaml ajouter templating comme argument

arguments: [@templating] 

Ensuite, créez une propriété et l'affecter à un constructeur:

private $templating; 

public function __construct($templating) 
{ 
    $this->templating = $templating; 
} 

Et appelez comme $ ceci:

$this->templating->render('WebBundle:Default:login.html.twig', array('last_username' => null, 'error' => null,)); 

Maintenant, j'ai besoin de trouver une solution comment désactiver le jeton pour l'utilisateur. Si quelqu'un sait m'aider mec (je ne suis plus stoner).