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 :

Charger des paramètres en fonction du host


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2010
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Juin 2010
    Messages : 88
    Par défaut Charger des paramètres en fonction du host
    Bonjour à tous,

    J'arrive fraichement dans le monde symfony.
    Je me lance donc sur un premier projet qui est déployé à la fois en local (wamp win10) et à distance sur un hébergement Ovh

    Forcément, dans les deux cas, certains parametres du fichier parameters.yml sont différents. Comme les paramètres database et mailer
    Plutot que d'avoir des valeurs différentes dans le fichier parameters.yml local et distant, j'aimerais avoir un fichier de configuration qui soit chargé en fonction du domaine sur lequel le projet est appelé

    Par exemple en local sur http://localhost/....., je charge le fichier parameters_localhost.yml et à distance sur le domaine http://mondomaine.com/...... je charge le fichier parameters_mondomaine.com.yml

    J'ai fait de nombreuses recherches et je suis tombé sur cette question:
    http://stackoverflow.com/questions/3...ding-on-domain

    Je pensais avoir la solution et j'ai donc fait un bundle maison (pour le réutiliser à l'avenir) dans lequel j'ai mis le code suivant:
    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
    class pcEservicesMulticonfigExtension extends Extension
    {
        /**
         * {@inheritdoc}
         */
        public function load(array $configs, ContainerBuilder $container)
        {
            $configuration = new Configuration();
            $config = $this->processConfiguration($configuration, $configs);
    				$rootdir = $container->getParameter('kernel.root_dir');
    				$request = Request::createFromGlobals();
     
            $loader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
            $loader->load('services.yml');
     
            // Load parameters depending on current host
            $paramLoader	= new Loader\YamlFileLoader($container, new FileLocator($rootdir.'/config')); // Access the root config directory
            $host					= $request->getHttpHost();
    	if ($host==":")
    		$host				= "localhost";
    	$parameters = sprintf('parameters_%s.yml', $host);
     
            if (!file_exists($rootdir.'/config/'.$parameters)) {
                $parameters = 'parameters_default.yml'; // Default
            }
     
            $paramLoader->load($parameters);
     
        }
    }
    Et là, je n'arrive pas à le faire prendre en compte.

    Si je laisse les paramètres dans parameters.yml en espérant que mon bundle va écraser les valeurs existantes, niet, ce sont les valeurs de parameters.yml qui sont prises en compte
    Je me suis alors dit que mon bundle était peut etre appelé avant et que c'etait lui qui était écrasé.
    J'ai donc supprimé de parameters.yml les valeurs que je redéclare dans mon bundle et là, j'ai des erreurs disant que les valeurs n'existent pas

    Tout se passe donc comme si mon bundle n'etait pas actif alors que si je mets un echo dedans, je le vois ressortir AVANT les exceptions d'erreurs....

    Precision peut etre utile, pour l'instant, je teste la bonne prise en compte de mes parametres via la console. Ne serait qu'avec une commande cache:clear --env=dev ou encore doctrine:schema:update --dump-sql

    Merci de votre aide

  2. #2
    Membre extrêmement actif
    Avatar de dukoid
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2012
    Messages
    2 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2 100
    Par défaut
    vu qu'on peut faire ça :

    en local, mode prod : (le fichier config_prod.yml sera pris en compte)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    localhost/app.php/monurl        ou   localhost/monurl
    en local, mode dev: (le fichier config_dev.yml sera pris en compte)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    localhost/app_dev.php/monurl
    config_prod.yml et config_dev.yml fait un import de parameters.yml, à toi de modifier vers un éventuel parameters_prod.yml




    je ne vois pas l’intérêt de ce que tu veux faire...

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2010
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Juin 2010
    Messages : 88
    Par défaut
    Bonjour,

    Le but n'est pas d'avoir une conf différente en mode prod ou en mode dev, mais d'avoir des parametres différents en fonction du host appelé.....

    J'ai pris l'exemple http://localhost et http://www.mondomaine.com mais ça peut aussi etre des parametres différents en fonction d'un site hébergé en .fr, .it, .es etc etc

    A dela de l'interet ou pas du besoin, cela est il faisable techniquement ?

    Merci

  4. #4
    Membre extrêmement actif
    Avatar de dukoid
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2012
    Messages
    2 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2 100
    Par défaut
    http://symfony.com/doc/2.8/component...resources.html

    c'est là dedans que tu vas y mettre tes chargements de config sous condition :
    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
     
    use Symfony\Component\Config\Loader\FileLoader;
    use Symfony\Component\Yaml\Yaml;
     
    class YamlUserLoader extends FileLoader
    {
        public function load($resource, $type = null)
        {
            $configValues = Yaml::parse(file_get_contents($resource));
     
            // ... handle the config values
     
            // maybe import some other resource:
     
            // $this->import('extra_users.yml');
        }
     
        public function supports($resource, $type = null)
        {
            return is_string($resource) && 'yml' === pathinfo(
                $resource,
                PATHINFO_EXTENSION
            );
        }
    }

  5. #5
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2010
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Juin 2010
    Messages : 88
    Par défaut
    Si je comprends bien donc, il faut que je fasse mon propre Yaml loader qui sera appelé pour charger les fichiers de conf

    C'est dans ce dernier qu'en fonction de certaines choses (host), chargerai tel ou tel fichier.

    Questions: Comment mon loader sera t il appelé ? Et sera t il appelé pour tous les fichiers yml ou bien que pour le parameters.yml ?

    Merci

  6. #6
    Membre extrêmement actif
    Avatar de dukoid
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2012
    Messages
    2 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2 100
    Par défaut
    en mode prod le framework sait qu'il doit appeller tel ou tel fichier (config_prod.yml...)
    en mode dev le framework sait qu'il doit appeller tel ou tel fichier (config_dev.yml...)
    dans tous les cas, la partie que tu va ajouter dans YamlUserLoader

    normalement tout est expliqué dans la doc... pour ma part, je n'ai jamais fais ce genre de chose donc je ne peux t'en dire plus

Discussions similaires

  1. [RTW] Charger des paramètres sans recompiler (m-file)
    Par maatmaar dans le forum Simulink
    Réponses: 6
    Dernier message: 06/11/2008, 09h41
  2. Réponses: 4
    Dernier message: 01/10/2008, 11h37
  3. Passer des paramètres à une fonction dans before_filter
    Par abir84 dans le forum Ruby on Rails
    Réponses: 1
    Dernier message: 27/01/2008, 19h40
  4. Réponses: 2
    Dernier message: 21/07/2007, 01h12
  5. Charger des paramètres à partir de beans
    Par lalakers dans le forum ANT
    Réponses: 1
    Dernier message: 19/05/2004, 18h25

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