Как мне написать цепочки маршрутизации для поддомена в Zend Framework в файле routing INI?

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

Вопрос

Я пытаюсь создать поддомен с помощью маршрутизатора Zend, а затем для каждого раздела в поддомене, например subdomain.site.com/section / Я создаю другой маршрут, а затем пытаюсь связать его с маршрутом поддомена.но я не знаю как.Я прочитал всю документацию, которую смог найти, и все форумы, но это приводит меня к тому, что я должен разобраться во всем самостоятельно.Пока что мои попытки просто выдают мне эту ошибку:

Уловимая фатальная ошибка:Аргумент 2 передан в Zend_Controller_Router_Rewrite::addRoute() должен реализовывать интерфейс Zend_Controller_Router_Route_Interface с заданным значением null, вызывается в /var/local/zend/library/Zend/Controller/Router/Rewrite.php в строке 155 и определяется в /var/local/zend/library/Zend/Controller/Router/Rewrite.php в строке 93

со следующим кодом:

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

Я не могу найти пример того, как связать это с INI-файлом, где-либо в сети.Все приложение написано в INI для конфигурации маршрутизации, поэтому я не могу переключить его на конфигурацию на основе массива (или XML, если уж на то пошло), в которой содержится 100% примеров в Интернете.

Если бы я мог сделать это в форме массива, я мог бы просто сказать это:

$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)

У кого-нибудь есть какие-либо идеи о том, как сделать вышеописанное в INI-файле?

Это было полезно?

Решение

Вот в основном то, что вы хотите, в формате 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]+'

Это даст вам следующие маршруты: b2b-signup, и b2b-anotherroute.

Вот несколько важных замечаний о цепочке маршрутов:

При объединении маршрутов в цепочку параметры внешнего маршрута имеют более высокий приоритет, чем параметры внутреннего маршрута.Таким образом, если вы определяете контроллер во внешнем и во внутреннем маршруте, будет выбран контроллер внешнего маршрута.

Имена родительских / дочерних маршрутов, связанных цепочкой, всегда объединяются с помощью тире!Итак, как в примере выше, b2b.chains.signup становится маршрутом с именем b2b-signup (который вы можете использовать для сборки URL-адресов и т.д.).

Ты можешь продолжать цепляться!Цепочки цепей могут иметь цепочки.

Дочерние элементы цепных маршрутов не работают с подстановочными знаками.Видишь #ZF-6654.Вот запись в блоге это говорит о том, почему это, возможно, не имеет большого значения.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top