Partage
  • Partager sur Facebook
  • Partager sur Twitter

Symfony - supprimer les Deprecated

    6 juillet 2020 à 11:10:35

    Bonjour à tous,

    Je suis en train de me prendre la tête pour retirré les deprecated que j'obtiens depuis que je suis passé en version 5.1 de symfony ... Pouvez vous m'aider ?

    Pour le problème de single colon je ne sais pas a quoi correspond ce single colons justement ...

    Et pour l'autowiring, si je comprend bien la doc symfony je dois utiliser un alias mais je n'y arrive pas :'(

    Deux jours que je cherche!

    Merci d'avance

    Methos

    • Partager sur Facebook
    • Partager sur Twitter
      6 juillet 2020 à 11:16:12

      Salut

      Un "colon" est un deux-points en français. En gros, ce qu'il t'est dit, c'est que tu utilises encore la notation Symfony 3.4 pour désigner tes contrôleurs, et qu'il te faut passer à la notation qui est citée en exemple dans le message d'erreur.

      Pour ce qui est de l'autowiring, je ne vois pas à quel message tu fais référence. Mais cela me semble surprenant que tu aies besoin d'un alias pour un service, sachant que l'autowiring est justement en partie pour les enlever…

      • Partager sur Facebook
      • Partager sur Twitter
        6 juillet 2020 à 11:30:20

        Merci pour ta réponse! 

        Pour l'autowiring c'est les deux dernières erreurs ... quand je regarde sur la doc de symfony ils disent ceci:

        https://symfony.com/doc/current/service_container.html#explicitly-configuring-services-and-arguments

        • Partager sur Facebook
        • Partager sur Twitter
          6 juillet 2020 à 11:35:55

          D'accord. Donc cela implique que tu dois faire de l'autowiring explicite de tout ce que tes classes ont besoin, et plus injecter l'entier du conteneur en mode gros bourrin.

          • Partager sur Facebook
          • Partager sur Twitter
            6 juillet 2020 à 11:41:54

            Je comprend le principe mais je ne sais pas comment faire :'(

            voici le fichier du mode maintenance, c'est l'injection du container qui pose problème ?

            <?php
            namespace App\EventListener;
            
            use Exception;
            use Psr\Container\ContainerInterface;
            use Symfony\Component\HttpFoundation\Response;
            use Symfony\Component\HttpKernel\Event\RequestEvent;
            use Twig\Environment;
            
            class MaintenanceListener
            {
                /**
                 * @var ContainerInterface
                 */
                private $container;
                /**
                 * @var Environment
                 */
                private $twig;
            
                public function __construct(ContainerInterface $container, Environment $twig) {
                    $this->container = $container;
                    $this->twig = $twig;
                }
            
            
                /**
                 * @param RequestEvent $event
                 *
                 * @throws Exception
                 */
                public function onKernelRequest(RequestEvent $event) {
                    $maintenance = $this->container->getParameter('maintenance') ?? false;
            
                    if($maintenance == true && $this->container->get('kernel')->getEnvironment() == "dev" && !in_array($event->getRequest()->getClientIp(), $this->authorized_ip())) {
                        $event->setResponse(new Response($this->twig->render('bundles/TwigBundle/Exception/error503.html.twig'), 503));
                        $event->stopPropagation();
                    }
                }
            
                public function authorized_ip() {
                    return [ '37.167.219.216', '::1', '87.65.125.0' ];
                }
            }
            



            • Partager sur Facebook
            • Partager sur Twitter
              6 juillet 2020 à 14:07:11

              Comme je l'ai dit : à la place d'injecter le conteneur entier, tu injectes tout ce que tu récupères depuis ce conteneur, donc (pas nécessairement dans cet ordre) :

              • le paramètre maintenance ;
              • l'environnement.

              -
              Edité par Ymox 6 juillet 2020 à 14:07:48

              • Partager sur Facebook
              • Partager sur Twitter
                8 juillet 2020 à 15:52:09

                Merci ! Après un peu de recherche, voila ce que ça donne :

                <?php
                namespace App\EventListener;
                
                use Exception;
                use Psr\Container\ContainerInterface;
                use Symfony\Component\DependencyInjection\ParameterBag\ContainerBagInterface;
                use Symfony\Component\HttpFoundation\Response;
                use Symfony\Component\HttpKernel\Event\RequestEvent;
                use Twig\Environment;
                
                class MaintenanceListener
                {
                    /**
                     * @var ContainerBagInterface
                     */
                    private $params;
                    /**
                     * @var Environment
                     */
                    private $twig;
                    private $env;
                
                    public function __construct($env, ContainerBagInterface $params, Environment $twig) {
                        $this->params = $params;
                        $this->twig = $twig;
                        $this->env = $env;
                    }
                
                
                    /**
                     * @param RequestEvent $event
                     *
                     * @throws Exception
                     */
                    public function onKernelRequest(RequestEvent $event) {
                        $maintenance = $this->params->get('maintenance') ?? false;
                
                        if($maintenance == true && $this->env == "dev" && !in_array($event->getRequest()->getClientIp(), $this->authorized_ip())) {
                            $event->setResponse(new Response($this->twig->render('bundles/TwigBundle/Exception/error503.html.twig'), 503));
                            $event->stopPropagation();
                        }
                    }
                
                    public function authorized_ip() {
                        return [ '37.167.219.216', '::1', '87.65.125.0' ];
                    }
                }
                
                class NotifLogic
                {
                    private $router;
                
                public function __construct($router)
                    {
                        $this->router = $router;
                    }
                
                    public function generateMangaCommentNotif(Manga $manga, $options = []){
                        $this->addNotif( $manga, Notif::E_MANGA_NEW_COM,
                            $manga->getName() . ' - Il y a un nouveau commentaire.',
                            $this->router->generate('mangas_comments', ['slug' => $manga->getSlug()]),
                            $options
                        );
                    }
                }
                    App\EventListener\MaintenanceListener:
                        arguments: ["%kernel.environment%"]
                        tags:
                            - { name: kernel.event_listener, event: kernel.request, method: onKernelRequest }
                
                    App\Logic\NotifLogic:
                        class: App\Logic\NotifLogic
                        arguments: [ router ]

                Tu en penses quoi ?

                Il me reste encore les deux du milieu :'(

                Merci d'avance

                Methos

                • Partager sur Facebook
                • Partager sur Twitter
                  8 juillet 2020 à 21:51:42

                  J'ai cru un instant que tu continuais d'injecter l'entier du conteneur, mais tu n'injectes plus que les paramètres — mais tous. Il y aurait encore moyen de simplifier en n'injectant plus que maintenance à la place.

                  Avec ce lien, tu peux voir comment définir des paramètres de service selon le nom qu'ils ont dans les définitions de constructeurs de ces services. Je les utilise ici. Tu peux donc faire de manière similaire pour ce paramètre maintenance. D'ailleurs, où le déclares-tu ?

                  • Partager sur Facebook
                  • Partager sur Twitter
                    9 juillet 2020 à 19:25:08

                    merci pour tes reponses, il est définis dans services.yaml dans la partie parameters:

                    parameters:
                        locale: 'fr'
                        google_recaptcha_site_key: '%env(GOOGLE_RECAPTCHA_SITE_KEY)%'
                        maintenance: true
                        images: '%env(BASE_URL)%/assets/images/'



                    • Partager sur Facebook
                    • Partager sur Twitter
                      9 juillet 2020 à 20:59:55

                      OK, donc dès le départ tu pouvais lister "%maintenance%" dans ton services.yaml et ne pas mettre quoi que ce soit de lié au conteneur dans le constructeur de ton service.

                      Tu peux faire comme dans mon exemple du message précédent, à savoir définir le paramètre de service comme valant le paramètre d'application "%maintenance%" (dans mon exemple, c'était %upload_path%"), puis adapter le constructeur de ton service encore une fois et ainsi permettre à l'autowiring de l'injecter sans que tu n'aies à le faire (dans mon exemple $uploadPath).

                      • Partager sur Facebook
                      • Partager sur Twitter

                      Symfony - supprimer les Deprecated

                      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                      • Editeur
                      • Markdown