Comment écrire des chaînes de routage pour un sous-domaine dans Zend Framework dans un fichier INI de routage?

StackOverflow https://stackoverflow.com/questions/1052614

Question

J'essaie de créer un sous-domaine à l'aide de Zend Router, puis pour chaque section d'un sous-domaine, tel que sous-domaine.site.com/section/ Je crée un autre itinéraire, puis j'attache l'enchaînement à celui du sous-domaine. mais je ne sais pas comment. J'ai lu toute la documentation que j'ai pu trouver et tous les forums, mais cela m'amène à le découvrir moi-même. Jusqu'ici, mes tentatives me font juste cette erreur:

  

Erreur fatale capturable: l'argument 2 a été passé à   Zend_Controller_Router_Rewrite :: addRoute () doit implémenter l'interface   Zend_Controller_Router_Route_Interface, null donné, appelé dans   /var/local/zend/library/Zend/Controller/Router/Rewrite.php à la ligne 155   et défini dans   /var/local/zend/library/Zend/Controller/Router/Rewrite.php à la ligne 93

avec le code suivant:

routes.b2b.type = "Zend_Controller_Router_Route_Hostname"
routes.b2b.route = "sales.sitename.com"
routes.b2b.defaults.module = b2b
routes.b2b.defaults.controller = index
routes.b2b.defaults.action = index

routes.b2b_signup.type = "Zend_Controller_Router_Route_Static"
routes.b2b_signup.route = "/signup"
routes.b2b_signup.defaults.controller = "index"
routes.b2b_signup.defaults.action   = "signup"

routes.b2b_login.type = "Zend_Controller_Router_Route_Chain"
routes.b2b_login.chain = b2b_signup

Je ne trouve pas d'exemple sur la façon de chaîner cela avec un fichier INI n'importe où sur le réseau. L’ensemble de l’application est écrit dans une INI pour la configuration du routage. Je ne peux donc pas la basculer vers une configuration basée sur des tableaux (ou XML, dans lequel 100% des exemples sur Internet sont présents).

Si je pouvais le faire sous forme de tableau, je pourrais simplement dire ceci:

$hostnameRoute = new Zend_Controller_Router_Route_Hostname(
    'sales.sitename.com',
    array(
        'controller' => 'index',
        'module'     => 'b2b',
        'action'     => 'index'
    )
);

$hostnameRoute = new Zend_Controller_Router_Route_Static(
    '/signup',
    array(
        'controller' => 'index',
        'module'     => 'b2b',
        'action'     => 'signup'
    )
);
    $chainedRoute = new Zend_Controller_Router_Route_Chain();
    $chainedRoute->chain($b2b_signup)

Quelqu'un at-il des idées sur la manière de procéder comme indiqué ci-dessus dans un fichier INI?

Était-ce utile?

La solution

Voici en gros ce que vous voulez, au format INI:

routes.b2b.type = "Zend_Controller_Router_Route_Hostname"
routes.b2b.route = "sales.sitename.com"
; you could specify a default module (or anything) to use for the whole 
; route chain here, like so: 
; routes.b2b.defaults.module = "default"

routes.b2b.chains.signup.type = "Zend_Controller_Router_Route_Static"
routes.b2b.chains.signup.route = "/signup"
routes.b2b.chains.signup.defaults.controller = "index"
routes.b2b.chains.signup.defaults.action = "signup"

routes.b2b.chains.anotherroute.route = "/something/:foo" ; etc, etc.
routes.b2b.chains.anotherroute.defaults.action = "foo"
routes.b2b.chains.anotherroute.defaults.controller = "index"
routes.b2b.chains.anotherroute.defaults.foo = "bar"
routes.b2b.chains.anotherroute.reqs.foo = '[a-z]+'

Cela vous donnera les routes suivantes: b2b-signup et b2b-anotherroute.

Voici quelques remarques importantes sur le chaînage des itinéraires:

Lors de l'enchaînement de routes, les paramètres de la route externe ont une priorité plus élevée que ceux de la route interne. Ainsi, si vous définissez un contrôleur dans les routes externe et interne, le contrôleur de la route externe est sélectionné.

Les noms d’itinéraires chaînés parent / enfant sont toujours concaténés avec un tiret! Ainsi, comme dans l'exemple ci-dessus, b2b.chains.signup devient une route nommée <=> (que vous pouvez utiliser pour l'assemblage d'URL, etc.).

Vous pouvez continuer à vous enchaîner! Les chaînes de chaînes peuvent avoir des chaînes.

Les enfants des itinéraires chaînés ne fonctionnent pas avec les jokers. Voir # ZF-6654 . Voici un article de blog qui parle de pourquoi cela peut ne pas être un gros problème.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top