Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 29-07-2016 10:50:02

zigo
Membre
Date d'inscription: 24-02-2016
Messages: 30

Les routes, les routes, les routes...

Salut ! Je reviens vers vous smile

Je suis face à un problème de routing, qui est identifié. Je vous explique :

J'essaye de créer une appli pour paramétrer certaines choses, genre créer mes entités de base etc. Et il faut pouvoir agir sur les différents environnements qui sont actuellement Dev et Recette.

La première idée avait été de créer dans chaque route un paramètre "environnement" de cette manière là

 

Code:

'autonomie'            => [
                        'type'    => 'segment',
                        'options' => [
                            'route'       => '/autonomie[/:environnement][/:action][/:id]',
                            'constraints' => [
                                'environomment' => '[a-zA-Z][a-zA-Z0-9_-]*',
                                'action' => '[a-zA-Z][a-zA-Z0-9_-]*',
                                'id'     => '[0-9a-z]+',
                            ],
                            'defaults'    => [
                                'controller' => 'autonomie/controller',
                                'environment' => 'dev'
                            ],
                        ],
                    ],

Ça a bien fonctionné mais il faut le spécifier dans chaque route, et envoyer le paramètre dans tous les liens et donc l'utilisé dans tout les controllers et toutes les vues.

La deuxième idée a donc été de le mettre en paramètre de la route principale et ne plus avoir à y toucher derrière mais là encore il faut quand même l'envoyer tout le temps. Je pense que Zend reconstruit à chaque fois toutes les routes donc il bloque sur ce paramètre environnement si il n'est pas récupérable quelque part. Mais dans ce cas je n'arrive pas à le récupérer tout le temps..

Et je me retrouve à court d'idée sur comment gérer ce paramètre le plus simplement possible, peut-être auriez vous des idées sur ce type de gestion ? smile

Merci !

Dernière modification par zigo (29-07-2016 10:56:11)

Hors ligne

 

#2 29-07-2016 11:01:38

JGreco
Administrateur
Date d'inscription: 22-12-2012
Messages: 432

Re: Les routes, les routes, les routes...

Bonjour,

Je ne comprend pas tellement ce que tu souhaite faire de ce paramètre, ni de comment tu l'identifie.


ZF2 et doctrine addict
profil stack overflow : http://stackoverflow.com/users/3333246/ … ab=profile

Hors ligne

 

#3 29-07-2016 11:32:17

zigo
Membre
Date d'inscription: 24-02-2016
Messages: 30

Re: Les routes, les routes, les routes...

Ok, je vais tacher d'être plus clair smile

Ce paramètre "environment" me permet de définir si je vais aller chercher mes données dans ma base de données dev ou recette.

Il est donc variable et je peux pas le fixer en dur. Je cherche donc un moyen de gérer ce paramètre au plus simple. Pour le moment ça se résume à :

Le récupérer depuis la route

Code:

 $environment = $this->params()->fromRoute('environment');

L'envoyer dans la vue

Code:

return new ViewModel(
            [
                'utilisateurs'  => $utilisateurs,
                'id'            => $id,
                'environment'   =>$environment,
            ]
        );

Et le remettre dans les liens

Code:

<a href="<?php echo $this->url(
                        'support/vehicule',
                        [
                            'environment' => $this->environment,
                            'id'          => $entreprise['idAffiliation']
                        ]
                    ); ?>"><?php echo $entreprise['vehicules']; ?></a>

Et ça partout partout. Donc je me disais qu'il y'a peut être moyen de le fixer une bonne fois pour toutes quand je rentre dans la section dev ou recette de mon appli pour ne pas avoir à m'en soucier après.

Je sais pas si c'est encore très clair yikes

Hors ligne

 

#4 29-07-2016 11:38:04

JGreco
Administrateur
Date d'inscription: 22-12-2012
Messages: 432

Re: Les routes, les routes, les routes...

D'accord,

Je vais donc tâcher de te donner des idées exploitables, en rapport avec cela.

J'aurais personnellement utilisé un événement sur EVENT_ROUTE ou dès que possible.
Dans le listener attaché, j'aurais analysé dans qu'elle section je suis pour déterminer ce paramètre que je poserai sous forme d'une variable (mis dans la session par exemple). Cela te le sors du coup de tes url ce qui est pas plus mal puisqu'il joue sur tes insert de donnés.


ZF2 et doctrine addict
profil stack overflow : http://stackoverflow.com/users/3333246/ … ab=profile

Hors ligne

 

#5 29-07-2016 12:25:08

zigo
Membre
Date d'inscription: 24-02-2016
Messages: 30

Re: Les routes, les routes, les routes...

Ok, ça fait appelle à des éléments nouveaux dans mon apprentissage de Zend :p

Si je comprends bien ce que tu proposes, ça serait sur les quelques liens qui permettent de passer d'un environnement à un autre :
- lancer l’événement EVENT_ROUTE pour créer cette variable
- La mettre en session
- La récupérer dans les controllers pour faire mes appels de web service

Et donc la gestion ne se fait plus dans les routes. J'aime bien l'idée !
Actuellement j'ai pas encore de système de login donc mettre en session.. >.<  Mais peut être une classe service qui s'occuperait de retourner cette variable pourrait palier à ça pour le moment.

Hors ligne

 

#6 29-07-2016 12:29:04

JGreco
Administrateur
Date d'inscription: 22-12-2012
Messages: 432

Re: Les routes, les routes, les routes...

La session n'est pas lié au login, elle est lié a celui qui requete sur ton site, même un invité non loggé possède une session de son navigateur (Le composant Container de zend t'en dira plus)

Je ne sais pas comment sont construits tes liens, mais dans l'idée tu as tout compris.


ZF2 et doctrine addict
profil stack overflow : http://stackoverflow.com/users/3333246/ … ab=profile

Hors ligne

 

#7 29-07-2016 12:38:52

zigo
Membre
Date d'inscription: 24-02-2016
Messages: 30

Re: Les routes, les routes, les routes...

Yes,
J'ai déjà utilisé Container donc je devrais pouvoir m'en sortir là dessus, le EVENT_ROUTE par contre c'est complètement nouveau donc je vais regarder ça tranquillement.

Hors ligne

 

#8 29-07-2016 12:49:16

JGreco
Administrateur
Date d'inscription: 22-12-2012
Messages: 432

Re: Les routes, les routes, les routes...

Je te donne un peu d'aide si tu veux :

Comprendre (en fr) comment ZF2 gère les Evénement :
http://www.michaelgallego.fr/blog/2013/ … amework-2/

Quels sont les evenement qui sont déjà utilisé par zf2
https://akrabat.com/a-list-of-zf2-events/

Des exemples :
https://samsonasik.wordpress.com/2013/0 … ntmanager/

Le dernier exemple devrait t'intérréser.


ZF2 et doctrine addict
profil stack overflow : http://stackoverflow.com/users/3333246/ … ab=profile

Hors ligne

 

#9 29-07-2016 13:12:16

zigo
Membre
Date d'inscription: 24-02-2016
Messages: 30

Re: Les routes, les routes, les routes...

En parcourant un peu, je pourrais faire un truc de ce style là ?

Code:

public function onBootstrap(MvcEvent $e)
    {
        $event = $e->getApplication()->getEventManager();
        $event->attach('route', function($e) {
            $container = new Container('environment-session');
     
            //mon catch pour récupérer "dev" ou "recette"
            $container->environment = $mon_catch
        });
    }

Et là première chose que je me dis, c'est hors la route, je ne peux actuellement pas différencier l'environnement sur lequel je suis.

Hors ligne

 

#10 29-07-2016 13:25:34

JGreco
Administrateur
Date d'inscription: 22-12-2012
Messages: 432

Re: Les routes, les routes, les routes...

Voila le plus dur, et c'était le but de ma première réponse, tout dépend combien tu as de manière d'identifier dev ou recette.

Si tu n'a aucune autre solution que de passer par la route pour renseigner dev ou recette, chose que tu as l'air de confirmer, alors les solutions pour centraliser cela me paraissent compliqués. Et tu es obligé de faire cela partout partout...

Comme tu l'a si bien expliqué c'est embêtant, et probablement que tu as un problème d'architecture a ce niveau là.


ZF2 et doctrine addict
profil stack overflow : http://stackoverflow.com/users/3333246/ … ab=profile

Hors ligne

 

#11 29-07-2016 13:41:31

zigo
Membre
Date d'inscription: 24-02-2016
Messages: 30

Re: Les routes, les routes, les routes...

Je suis tout a fait d'accord. Et je te confirme bien que je n'ai actuellement aucun moyen d'identifier les deux environnements sans la route.

Sinon une solution que j'avais imaginé mais je n'ai aucune idée sur sa faisabilité ça serait en gros :

J'ai ma route qui contient le paramètre "environnement"

Code:

'support'                 => [
                'type'    => 'segment',
                'options' => [
                    'route'       => '/:environment/support',
                    'constraints' => [
                        'environment' => '[a-zA-Z][a-zA-Z0-9_-]*',
                    ],
                    'defaults'    => [
                        'environment' => 'dev',
                    ],
                ],

Le but est dans ne pas avoir dans les child route à définir environnement. Sauf que si je le fais pas, c'est le défaut qui est pris en compte. Donc ça serait d’interagir dynamiquement sur ce paramètre par défaut.
En utilisant par exemple la session.

Mais est-il possible d’interagir dans le module.config ? et est-ce que même si c'est lourd, il vaut mieux pour le moment saisir le paramètre partout..

Hors ligne

 

#12 29-07-2016 14:06:46

JGreco
Administrateur
Date d'inscription: 22-12-2012
Messages: 432

Re: Les routes, les routes, les routes...

Seul toi peu faire ce choix, pour le bien de ton projet, la durée, la maintenabilité, les évolutions prévues ?

Ce que je comprends pas c'est que veux dire Dev et recette ? D'accord ce sont deux bases différentes, mais dans quel contexte c'est l'une ou l'autre ?

Ton environnement c'est dev pour developpement et recette pour production c'est cela ?


ZF2 et doctrine addict
profil stack overflow : http://stackoverflow.com/users/3333246/ … ab=profile

Hors ligne

 

#13 29-07-2016 17:17:09

zigo
Membre
Date d'inscription: 24-02-2016
Messages: 30

Re: Les routes, les routes, les routes...

C'est tout a fait ça, la dev c'est l'environnement de développement et la recette est l'environnement utilisé pour les tests.

Sauf que (oui c'est très con) les données sur l'une et l'autre ne sont pas les mêmes.. Donc je fais un outil externe pour paramétrer rapidement les choses que ce soit pour un environnement ou l'autre.
Pour que ce soit générique et pas dupliquer tout deux fois, on a introduit l'environnement comme un paramètre qui permet de se connecter sur une base ou l'autre. Si on pouvait juste être ISO entre les deux avec les mêmes entités dans  chaque ça serait la fête. 

L'heure est un peu à la panique car on nous demande de faire un site en mode SAP avec une API contenant des modèles qui s'adapteraient à la volée pour correspondre à chaque client etc. Et le tout en pas bcp de temps alors que personne à l'expertise technique pour juste imaginer la faisabilité de tout ça x)
Un peu comme si on devait créer un SAAS où dans lequel il y'a un paramétrage du paramétrage en 4mois.

Dernière modification par zigo (01-08-2016 15:16:30)

Hors ligne

 

#14 30-07-2016 02:11:53

JGreco
Administrateur
Date d'inscription: 22-12-2012
Messages: 432

Re: Les routes, les routes, les routes...

J'ai un peu de mal a visualiser ce que tu me dis car, moi aussi j'ai différents environnements et mes connections aux base de données se font bien en amont dans la configurations des adapteurs de connections en fait. Le coup de jouer sur l'url parceque tu ne connait pas avant sur l'environnement d'ou tu viens me semble étrange.

Je ne peux t'aider plus et j'en suis désolé.


ZF2 et doctrine addict
profil stack overflow : http://stackoverflow.com/users/3333246/ … ab=profile

Hors ligne

 

#15 01-08-2016 15:25:43

zigo
Membre
Date d'inscription: 24-02-2016
Messages: 30

Re: Les routes, les routes, les routes...

Je comprends.
Juste pour que tu visualises mieux le truc même si ça apportera pas grand chose pour le problème,
Je suis pas connecté directement  aux bases de données mais à une API donc il y'a une API Dev et une API Recette.
Toutes les informations de connexions à ces APIs sont renseignées dans une classe "RestfulApi[Env]Service" donc j'ai deux fichiers. Ils sont ensuite appelés par des alias restfulApi[Env]

Donc le paramètre dans la route me permet de savoir si je vais chercher restfulApiDev ou restfulApiRecette.

Ce qui est tricky c'est que le site que je fais n'est pas branché à un environnement particulier mais il doit accéder aux deux et donc il faut un moyen pour savoir sur quel environnement je tape et actuellement j'ai trouvé que la route..

Voilà en espérant que ce soit plus clair smile

Dernière modification par zigo (01-08-2016 15:26:22)

Hors ligne

 

#16 04-08-2016 23:34:23

Bouks
Membre
Lieu: Paris
Date d'inscription: 31-08-2012
Messages: 241

Re: Les routes, les routes, les routes...

Voici comment on peut faire:

- régler la variable d'environnement dans le VirtualHost de la conf Apache : SetEnv APPLICATION_ENV "recette"
- ou régler la variable d'environnement dans un fichier .htaccess (mais celui-ci ne devra pas être poussé pendant les déploiements, mais édité manuellement sur le virtualhost approprié ou en utilisant un outil de déploiement): SetEnv APPLICATION_ENV "Recette"
- ou régler la variable d'environnement dans PHP (bof, bof...): putenv("APPLICATION_ENV=recette")

Pour moi, la première solution est la mieux parce qu'elle évite des erreurs d'écrasement. Ça nécessite toutefois d'avoir accès à la conf du Virtualhost. J'ai nommé la variable APPLICATION_ENV, on peut l'appeler n'importe comment.

Ensuite, grâce à la fonction 'getenv()' tu récupères ton environnement qui te permet de cibler un fichier de conf du genre "config/autoload/db.recette.php" ou "config/autoload/db.dev.php"...

Exemple dans "application.config.php"

Code:

[lang=php]//on récupère la variable d'environnement (ne pas oublier de faire quelques contrôles et une valeur par défaut)
$env = getenv('APPLICATION_ENV');

return [
    'modules' => ...
    ...
    'module_listener_options' => [
        //on cible le fichier de conf de cet environnement.
        'config_glob_paths' => ['config/autoload/db/' . $env . '.php']
    ]
    ...

];

Sinon, si tu veux pouvoir alimenter à la volée ta db de dev OU de recette à partir du même Virtualhost, je te propose de mettre deux simples boutons "dev" et "recette" dans ton UI qui vont te mettre un cookie "environnement". Ensuite tu fais le test de l'environnement sur le cookie. Evidemment c'est moins secure (comme ta solution à base de paramètre dans l'url d'ailleurs).


22914720

Hors ligne

 

#17 08-08-2016 14:30:32

zigo
Membre
Date d'inscription: 24-02-2016
Messages: 30

Re: Les routes, les routes, les routes...

Ok, je vais étudier ça.
L'idée du cookie aussi ça pourrait être une solution, ou bien mettre en session l'information. Et le point d'entrée du site serait ces deux boutons.
Aujourd'hui j'ai eu de nouvelles infos, il est probable que j'ai à mettre en place un système de login dans ce site donc je pourrais surement associé cette information à l'utilisateur avec un admin_dev et un admin_recette par exemple.
Les besoins changent chaque jour alors j'attendrais d'avoir un peu plus de visibilité pour choisir quelque chose smile

Merci pour les réponses !

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages