IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Symfony PHP Discussion :

variable dans le controler injecter services [2.x]


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 23
    Par défaut variable dans le controler injecter services
    Bonjour à tous,
    Débutant avec symfony2 et déjà pas mal de problem
    j'ai une variable $user_id qui se trouve dans mon controller que je voudrais injecter dans un service. Sauf que avec toutes mes tentatives la variable est bien défini dans mon controller mais pas dans le service.

    voici une partie de mon code:
    services.yml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    app_user.directory_namer:
            class: App\UserBundle\DirectoryNamer\DirectoryNamer
            arguments: [$user_id]
    controller.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $user_id = $this->getUser()->getId();
     
     
                    $directoryNamer = $this->container->get('app_user.directory_namer');
                    if($directoryNamer->checkFolderExists($user_id) == false){
                      $test = $directoryNamer;
     
                    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    public function checkFolderExists($user_id){
            if(file_exists($this->getUploadRootDir($user_id))){
                return true;
            }else{
                return false;
            }
        }
     
        public function getUploadDir($user_id){
            return 'uploads/'.$user_id;
        }
        public function getUploadRootDir($user_id){
            return __DIR__.'/../../../../web/'.$this->getUploadDir($user_id);
        }
     
        public function getName(){
            return 'AppDirectoyryNamer';
        }
     
        public function setLocale($locale){
            $this->locale = $locale;
        }
    et la la variable $test qui est dans le controller me renvoi :
    object(App\UserBundle\DirectoryNamer\DirectoryNamer)[475]
    protected 'user_id' => null
    alors que la variable $user_id dans le controller me renvoir bien
    int '1

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2013
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2013
    Messages : 60
    Par défaut
    Bonsoir,

    Ca peut paraitre trivial mais c'est ce qui me vient à l'esprit en premier. Dans ton service, tu as bien un constructeur qui donne la bonne valeur à ton attribut useri_id (étant donné que tu n'en t'en sert pas dans ton service, j'ai un petit doute à ce sujet)?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 23
    Par défaut
    enfaite dans mon service je n'ai rien dans mon constructeur. J'ai essayé de recupérer le user dans le constructeur comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public function __construct($user_id){
     
            $this->user_id = $this->getUser()->getId();
     
            // $this->folder = $this->getUploadRootDir().'/'.$user_id;
     
        }
    mais j'ai cet erreur la:

    Call to undefined method App\UserBundle\DirectoryNamer\DirectoryNamer::getUser()
    comme et je ne vois pas pourquoi ça ne marche pas et que avec la meme méthode dans le controller ça marche je me suis dis autant le recuperer dans le controller et ensuite l'envoyer dans le service... ce qui ne marche pas non plu

  4. #4
    Membre émérite
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Août 2011
    Messages
    477
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Août 2011
    Messages : 477
    Par défaut
    Bonsoir,

    Oui effectivement, ça ne peux pas marcher.

    Essaye ceci ça ira mieux.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
          private $user_id ;
     
          public function __construct($user_id){
     
            $this->user_id = $user_id;
     
     
        }
    Si tu souhaites récupérer le user, il faut lui passer l'objet User à ton service.

    Merci à Frfrance31 pour sa justesse d'esprit

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 23
    Par défaut
    merci mais j'avais déjà essayé sans succes. enfin je pense que j'essayé pas comme il faut..

    mais je viens de trouver une solution et qui marche

    services.yml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    app_user.directory_namer:
            class: App\UserBundle\DirectoryNamer\DirectoryNamer
            arguments: [@security.context, $user_id]
            scope: request
    service.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    protected $context;
     
     
        public function __construct($context){
            $this->context = $context;
        }
     
        public function getUserId(){
            return $this->context->getToken()->getUser()->getId();
        }

  6. #6
    Membre émérite
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Août 2011
    Messages
    477
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Août 2011
    Messages : 477
    Par défaut
    Ton user_id, n'est pas utilisé. Ce n'est pas la peine de la définition du service.

    Avec cette méthode, tu récupère le User connecté.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 16/04/2010, 18h01
  2. Passage de variables dans un controle utilisateur
    Par oclone dans le forum ASP.NET
    Réponses: 6
    Dernier message: 09/10/2008, 10h30
  3. Réponses: 3
    Dernier message: 06/06/2007, 15h21
  4. [synthaxe?]Injecter une variable dans l'url
    Par -Neo- dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 06/06/2007, 14h59
  5. Réponses: 7
    Dernier message: 22/02/2006, 17h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo