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 Globale dans Un controlleur


Sujet :

Symfony PHP

  1. #1
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2013
    Messages
    739
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Novembre 2013
    Messages : 739
    Points : 1 022
    Points
    1 022
    Par défaut Variable Globale dans Un controlleur
    Bonjour,
    Ce que j'ai dans mon controlleur:
    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
     
        public function uploadfileAction() {
            $validerfichier = $this->get('Fichier_Valid');
            $validerfichier->uploadfile();
            return $this->redirect($this->generateUrl('envoifichier'));
        }
     
        public function downloadAction($downloadfile) {
            $validerfichier = $this->get('Fichier_Valid');  //la classe Fichier dans FichierBundle
            $validerfichier->download($downloadfile);  // download manuel.pdf :)
        }
     
        public function lirefichierAction() {
     
            $validerfichier = $this->get('Fichier_Valid');  //la classe Fichier dans FichierBundle
            $fichiers_arrays = $validerfichier->toutlesfichiers(); // recuperer array des fichiers dans uploads :)  
            return $this->render('EspritAppGestionBundle:Default:lirefichier.html.twig', array(
                        'fichiers' => $fichiers_arrays
            ));
        }
    je veux que $validerfichier sois affectée au début (en haut du controlleur seulement ) et bien sur utilisé partout .

    merci, LM

  2. #2
    Membre actif
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2012
    Messages
    133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 133
    Points : 208
    Points
    208
    Par défaut
    Salut, ce n'est pas une variable globale que tu as besoin ici, mais d'un service.

    Crée un service qui va garder la variable et si possible gérer tous les traitements qui lui sont associés.
    Un service pouvant être appelé depuis un controller mais aussi depuis un autre service, même depuis ton template twig si tu fais ce qu'il faut pour, ça remplit pleinement ton besoin actuel. De manière générale, quand tu te rend compte que ton controller fait autre chose que de l'aiguillage c'est qu'il te manque des services pour faire office de boîtes noires.

  3. #3
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2008
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 1 576
    Points : 2 440
    Points
    2 440
    Par défaut
    Qu'est-ce qui t'empêche de créer une propriété $validerfichier et de l'initialiser dans le constructeur??

  4. #4
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2013
    Messages
    739
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Novembre 2013
    Messages : 739
    Points : 1 022
    Points
    1 022
    Par défaut
    @ Tsilefy j'ai rajouté:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    //
    use EspritApp\FichierBundle\Services\Fichier;
    use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
     
    class DefaultController extends Controller {
     
        private $validerfichier;
        public function __construct(Fichier $validerfichier) {
            $this->validerfichier = $validerfichier;
        }
    //
    mais ça tourne plus

  5. #5
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2008
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 1 576
    Points : 2 440
    Points
    2 440
    Par défaut
    Il faut transformer ton contrôleur en service (le principal effet est qu'il n'hérite plus de Controller), et tu injectes ensuite dans le service les paramètres que tu veux depuis ton conteneur à injection de dépendance (tu peux aussi injecter tout le conteneur, mais ce n'est pas une bonne pratique).

    Mais regarde également ce que lilalex a conseillé :-)

  6. #6
    Membre actif
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2012
    Messages
    133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 133
    Points : 208
    Points
    208
    Par défaut
    Tu peux aussi injecter tout le conteneur, mais ce n'est pas une bonne pratique
    Alors moi aussi j'avais lu ça et j'y ait cru dur comme fer ... mais ça c'était avant ^^.
    Les mecs qui ont conseillé ça n'ont jamais développé de commandes Symfony de un, de deux tu passes ta vie à modifier ton fichiers services.yml si tu fais passer les services un à un.
    A moins de vouloir distribuer ton bundle, il n'y a aucun intérêt à se refuser le "service container" dans les services que l'on crée.

  7. #7
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2008
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 1 576
    Points : 2 440
    Points
    2 440
    Par défaut
    C'est la différence entre "bonne pratique" et "pratique" :-) Je conseille toujours les bonnes pratiques, libre à chacun de s'arranger dans le cadre de ses circonstances personnelles :-)

    Mieux vaut savoir ce qu'on devrait faire, quite ensuite à ne pas le faire sciemment (au moins on sait ce qu'on perd et ce qu'on gagne dans ce cas).

    Le problème, c'est que le conteneur de Symfony est pénible à modifier, comme tu dis (pas difficile, mais juste pénible. Ça doit être le xml ou le yml!). Et quand un deadline approche, le monde réel revient à grand pas!

    JMSDiExtraBundle propose des fonctionnalités qui rendent ça plus facile, notamment avec une injection par annotation (un peu semblable à @Autowired de Spring en Java), mais je n'ai pas encore eu l'occasion de tester.

  8. #8
    Membre expérimenté Avatar de Nico_F
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2011
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2011
    Messages : 728
    Points : 1 310
    Points
    1 310
    Par défaut
    Déclare ton contrôleur en tant que service, injectes-y le service 'Fichier_Valid', affecte le en tant qu'attribut.

Discussions similaires

  1. Variable Globale dans un module de formulaire.
    Par wisiwi dans le forum Access
    Réponses: 5
    Dernier message: 30/03/2006, 14h03
  2. utilisation des variables global dans tout le projet
    Par EYENGA Joël dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 12/01/2006, 10h55
  3. Variables globales dans une classe
    Par vanitom dans le forum C++
    Réponses: 16
    Dernier message: 14/01/2005, 14h40
  4. Variables globales dans fichiers entête
    Par benj_f04 dans le forum C++
    Réponses: 5
    Dernier message: 13/08/2004, 09h06
  5. Variable "globale" (dans plusieurs templa
    Par mattmat dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 17/06/2003, 19h22

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