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 :

aide controller Service 3.3


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti Avatar de Hollux
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2016
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2016
    Messages : 20
    Par défaut aide controller Service 3.3
    Bonjour

    Je viens vous demander votre aide par rapport aux modification des services dans la maj 3.3 : https://symfony.com/doc/current/serv...vices-yml-file
    je fouille tout doucement et essai de reprendre mes marques et faire mes modifications pour cette version.

    et la depuis bientot 2 jours je n'arrive pas à trouver comment faire un simple "$this->get('service')->fonctionDuService()".
    C'est très cour et ultra pratique, et la seule chose que je vois c'est hyper long :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public service
    public function __construct (service){
     $this->service = service;
    }
    $this-service->fonctionDuService()
    4 lignes au lieu de 1 lignes dans le controler.


    Voila, voila, Merci d'avance de votre aide.

  2. #2
    Membre Expert 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 : 37
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2011
    Messages : 728
    Par défaut
    Hello,

    Est-ce que tu te trouves dans un contrôleur ?
    Est-ce que ton contrôleur étends de la classe Controller de base de Symfony ?
    Est-ce que la classe Controller de base de Symfony est ContainerAware ?
    Est-ce que tu peux nous dire quelle est l'erreur ?
    Est-ce que tu peux nous montrer ton code ?


  3. #3
    Membre émérite Avatar de tdutrion
    Homme Profil pro
    Architecte technique
    Inscrit en
    Février 2009
    Messages
    561
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 561
    Par défaut
    En effet l'injection de dépendance via le constructeur est maintenant la solution privilégiée, car ça permet de voir au premier coup d'oeil toutes les dépendences de la classe.

    J'irais même plus loin, et je dirais que le contructeur devrait être type hinté uniquement avec des interfaces et non pas des services concrets, et ces interfaces devraient avoir un minimum de méthodes chacunes.

    Bien sur ça fait plus de code (et un code plus long à écrire), mais c'est nettement plus propre car ça aide à réduire le couplage.

  4. #4
    Membre averti Avatar de Hollux
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2016
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2016
    Messages : 20
    Par défaut
    Bonjour,
    désolé du temps de réponse, j'étais malade

    Nico :

    Est-ce que tu te trouves dans un contrôleur ? Oui, j'aurais du précisé que c'était this->get('service')->fonctionservice(); MyBad
    Est-ce que ton contrôleur étends de la classe Controller de base de Symfony ? Oui, pour avoir accès au container et à $this->get()
    Est-ce que la classe Controller de base de Symfony est ContainerAware ? euuuu quoi ?
    Est-ce que tu peux nous dire quelle est l'erreur ? Il n'y a pas d'erreur.
    Est-ce que tu peux nous montrer ton code ? Le code n’existe pas !

    Je n'ai pas d'erreur ni rien, je cherche la nouvelle méthode pour faire quelque chose de particulièrement pratique et rapide qui est maintenant déprécié et retiré en symfony 4 si j'ai bien compris.
    Rappel : le $this->get('service')->fonctionservice();

    Théocrite :

    Oui je suis d'accord , c'est plus propre en haut pour pas mal de chose.
    Mais je me sers de plus en plus de micro méthodes maison, j'essai de plus en plus de faire de l'objet et d'exploser mon code en pleins de toutes petites méthodes.
    Et la c'est dommage de perdre 1h pour rajouter le use, la public function, l'info hinté dans __construct(), le $this et ENFIN le $this la ou j'ai besoin de ma fonction.

    Tu dis "la solution privilégiée", mais y a t'il une autre solution caché quelque part stp ?

    Merci à vous pour votre aide.

  5. #5
    Membre émérite Avatar de tdutrion
    Homme Profil pro
    Architecte technique
    Inscrit en
    Février 2009
    Messages
    561
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 561
    Par défaut
    En fait en Symfony 4 (comme dans beaucoup d'autres framework), on va avoir des middleware (psr7/psr15). Un middleware c'est une classe standard (Plain Old PHP Object ou POPO), callable. Par exemple :

    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
     
    <?php
     
    declare(strict_types=1);
     
    namespace MyBundle\Action;
     
    use Psr\Http\Message\ResponseInterface;
    use Psr\Http\Message\ServerRequestInterface;
    use Symfony\Component\Templating\EngineInterface;
    use Zend\Diactoros\Response\HtmlResponse;
     
    final class MyMiddleware
    {
     
        private $dependency;
     
        private $renderer;
     
        public function __construct(Dependency $dependency, EngineInterface $renderer)
        {
            $this->dependency = $dependency;
            $this->renderer = $renderer;
        }
     
        public function __invoke(ServerRequestInterface $request) : ResponseInterface
        {
            // do something with $this->dependency
     
            return new HtmlResponse($this->renderer->render('MyModuleBundle:Homepage:index.html.twig', [
     
            ]));
        }
    }
    A partir de cette classe, ce qu'il se passait en Symfony 2 surtout, c'est qu'on dispatchait sur un base controller :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    use Symfony\Bundle\FrameworkBundle\Controller\Controller;
    Comme tu peux le constater là (http://api.symfony.com/3.3/Symfony/B...ontroller.html), le base controller est ContainerAwareInterface et utilise le ContainerAwareTrait. L'injection du container est donc une setter injection, ce qui t'ouvre au temporal coupling (devoir appeler une methode avant une autre pour que la seconde marche correctement).

    Tu pourrais imaginer la même chose pour tes middlewares, avoir un BaseMiddleware (abstract), qui serait ContainerAware, mais je le déconseille fortement, il y a une raison pour que Symfony et ZF ne le proposent plus...

  6. #6
    Membre averti Avatar de Hollux
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2016
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2016
    Messages : 20
    Par défaut
    Très bien.

    J'ai rien compris ^^
    Quand j'ai du temps je vais devoir chercher à comprendre tout un tas de termes et de truc que tu as utilisé dans ton explication.

    Merci des infos

Discussions similaires

  1. Insertion des données à l'aide de Services Web
    Par nessing dans le forum JDeveloper
    Réponses: 1
    Dernier message: 16/05/2011, 10h03
  2. Réponses: 3
    Dernier message: 09/06/2010, 11h28
  3. Aide controle utilisateur télérik
    Par thuglife dans le forum ASP.NET
    Réponses: 1
    Dernier message: 08/05/2010, 17h59
  4. aide controles activeX
    Par fabulous07 dans le forum Windows Forms
    Réponses: 1
    Dernier message: 22/08/2007, 10h02

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