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

MVC PHP Discussion :

Créer un sous domaine pour un module


Sujet :

MVC PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 124
    Points : 57
    Points
    57
    Par défaut Créer un sous domaine pour un module
    Bonjour,

    ce que je souhaite faire est relativement simple sur le papier.

    http://www.monsite.com/module/id_produit.htm

    en

    http://module.monsite.com/id_produit.htm



    Bon le truc c'est qu'avec la doc officielle, c'est pas super clair.
    Apparemment, on doit créer une route static, ainsi qu'une route hostname, et on doit chainer les deux. Je comprends pas trop le principe du chainage.

    De plus, je passe par un fichier routes.ini. Je n'arrive pas à traduire les methodes du zend router en paramètres de configuration dans le fichier ini.

    Et sur google, je ne trouve aucun tuto, aucune documentation qui soit vraiment simple et concis.

    Merci pour votre coup de pouce.

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 124
    Points : 57
    Points
    57
    Par défaut
    Bon j'ai trouvé

    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
     
    host.type = "Zend_Controller_Router_Route_Hostname"
    host.route = "produits.monsite.com"
    host.defaults.module = "produits"
    host.defaults.controller = "produits"
    host.defaults.action = "index"
     
    fiche_produit.type = "Zend_Controller_Router_Route_Regex"
    fiche_produit.route = "([-\w]+).htm"
    fiche_produit.reverse = "%s.htm"
    fiche_produit.map.1 = "q"
    fiche_produit.defaults.module = "produits"
    fiche_produit.defaults.controller = "produits"
    fiche_produit.defaults.action = "voir-produit"
    fiche_produit.chain = "host"
    En fait, je pensais qu'en chainant les routes toutes les urls que je construis à l'aide de $this->url() pointeront automatiquement vers le bon domaine.
    Ca n'est pas le cas, si je suis sur produit.monsite.com , mes urls devant pointer vers www.monsite.com/controller/action gardent le même domaine actuel.

    Est ce qu'il y a un paramètre à ajouter aux hosts ?

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 13
    Points : 12
    Points
    12
    Par défaut
    Peux-tu nous donner les sources du bootstrap, je cherche à faire la même chose mais je n'y arrive pas ...

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 124
    Points : 57
    Points
    57
    Par défaut
    Hello,

    la solution que j'ai trouvé plus haut en fait ne fonctionne pas du tout. J'ai fait l'erreur de balancer en prod cette config, et il s'est averé que tous les chemins qui devait être accessible uniquement depuis www l'étaient aussi via le sous-domaine. Google l'a reperé je ne sais pas comment et je me retrouve avec toutes les pages dupliquées.

    J'ai trouvé comment procéder, mais je suis passé en config XML, que je trouve plus robuste pour le chainage. En ini, il me semble que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    fiche_produit.chains = "host"
    suffit (chains au lieu de mon chain plus haut)

    Au niveau de mon bootstrap
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
        	$routesconfig = new Zend_Config_Xml(
        			APPLICATION_PATH . '/configs/routes.xml', null
        			);
     
        	$router = new Zend_Controller_Router_Rewrite();
        	$router->addConfig($routesconfig); /**/
     
        	Zend_Controller_Front::getInstance()->setRouter($router);
    Comme la plupart font je pense. Après mon sous-domaine était statique, car je ne veux pas que tous mes modules soient accessibles en sous-domaine. Sinon il suffisait juste de remplacer l'hote sousdomaine.domaine.tld par :module.domaine.tld , dans la définition de l'host.

    Je rencontre un enorme problème par contre avec la config XML : impossible d'utiliser une route regex. Ca coince au niveau du mapping :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     
                        <viewarticle type = "Zend_Controller_Router_Route_Regex">
                            <route>actualites/([\w-]*)/(\d+)-([\w-]*)</route>
                            <map>
                                <categorie>1</categorie>
                                <id>2</id>
                                <titre>3</titre>
                            </map>
                            <defaults module="default" controller="actualites" action="viewarticle" />
                            <reverse>actualites/%s/%d-%s</reverse>
                        </viewarticle>
    Zend config xml me génère un tableau comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    ["_map:protected"] => array(3) {
        ["categorie"] => string(1) "1"
        ["id"] => string(1) "2"
        ["titre"] => string(1) "3"
    }
    Alors que pour que ça fonctionne, ça doit être un tableau numérique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
      ["_map:protected"] => array(3) {
        [1] => string(9) "categorie"
        [2] => string(2) "id"
        [3] => string(5) "titre"
      }
    en mettant les numéros en nomo de balise xml, je ne sais pas si c'est valide, mais ça ne prends pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <map>
       <1>categorie</1>
       <2>id</2>
    ....
     
    Fatal error: Uncaught exception 'Zend_Config_Exception' with message 'simplexml_load_file() [<a href='function.simplexml-load-file'>
    Voila. Ce bug a été reporté ici, mais je ne sais pas si une solution a été trouvée.

    Si quelqu'un passe par là

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 124
    Points : 57
    Points
    57
    Par défaut
    Bon eh bien, c'était mon ZF qui n'était pas à jour. Je passe de la 1.9.2 à la 1.10 et la config XML marche parfaitement.

    Ca marche mieux, mais y a encore des choses qui ne me semblent pas claires :/

    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
    <routes>
        <www type="Zend_Controller_Router_Route_Hostname">
            <route>www.domaine.com</route>
            <chains>
                <index type="Zend_Controller_Router_Route">
                    <route></route>
                    <defaults module="default" controller="index" action="index" />
                </index>
                <communaute>
                    <route>communaute</route>
                    <defaults module="communaute" />
                    <chains>
                        <index type="Zend_Controller_Router_Route">
                            <route>:action/*</route>
                            <defaults controller="index" action="index" />
                        </index>
                        <fiche-membre type="Zend_Controller_Router_Route_Regex">
                            <route>fiche/profil-(\d+)-(.+)</route>
                            <reverse>fiche/profil-%d-%s</reverse>
                            <map>
                                <id>1</id>
                                <nom>2</nom>
                            </map>
                            <defaults action="fichemembre" />
                        </fiche-membre>
                    </chains>
                </communaute>
            </chains>
        </www>
    Comme vous pouvez le voir, j'utilise une route <index> avec :action/* dedans pour couvrir les pages d'accueil et les actions basiques du controleur par défaut.

    http://www.domaine.com/communaute/une_action_au_hasard => marche très bien.

    http://www.domaine.com/communaute/ ne marche pas , c'est la page d'accueil qui s'affiche.
    J'ai vérifié, et c'est la route default qui est matchée.

    J'ai essayé un assemble() sur la route "www-communaute-index" et il me sort bien www.domaine.com/communaute/

    Je vois pas ce qu'il se passe là :/

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Nom de domaine pour un module
    Par Hyuge dans le forum MVC
    Réponses: 0
    Dernier message: 30/03/2010, 17h18
  2. Comment créer un sous domaine?
    Par shawn69 dans le forum IIS
    Réponses: 0
    Dernier message: 10/03/2010, 20h02
  3. Réponses: 2
    Dernier message: 21/01/2010, 16h57
  4. même sous-domaine pour tous mes domaines
    Par nabab dans le forum Apache
    Réponses: 1
    Dernier message: 24/06/2008, 19h37

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