Проблема цепочки Zend Router с поддоменом

У меня есть $siteRoute для субдоменов:

$siteRoute = new Zend_Controller_Router_Route_Hostname(
    ':siteSlug.test.com',
    array(
        'module' => 'site',
    ),
    array('siteSlug' => '^(programming|photography|gaming)$')            
);
$router->addRoute('site', $siteRoute);

и у меня есть $questionRoute для причудливых вопросов

$questionRoute = new Zend_Controller_Router_Route(
    'questions/:questionId/:questionSlug',
    array(
        'controller' => 'question',
        'action' => 'view',
        'questionSlug' => ''
    )
);
$router->addRoute('question', $siteRoute->chain($questionRoute));

все эти два маршрута сопоставляются без проблем. например: programming.test.com совпадений и отправок для маршрута site и programming.test.com/questions/132/test-headline совпадений для маршрута question.

Но когда я собираю новый URL-адрес с помощью помощника URL-адреса Zend_View или функции сборки Zend_Router для маршрута вопроса, он возвращает только путь, а не домен, например:

echo $questionRoute->assemble(array('questionId' => 1, 'questionSlug' => 'testing-testing', 'siteSlug' => 'programming'));

эхо questions/1/testing-testing не programming.test.com/questions/1/testing-testing.

Как я могу это сделать?


person cnkt    schedule 05.07.2011    source источник


Ответы (2)


Маршрутизатор заботится только о маршрутизации пути, т.е. берет путь и сопоставляет его с вашими модулями, контроллерами и действиями. Он в основном не знает о домене. Assemble только создает маршрут (путь) на основе ваших аргументов.

echo $_SERVER['HTTP_HOST'] . '/' . $questionRoute->assemble(...);
person Adrian World    schedule 05.07.2011

Попробуйте этот фрагмент кода, у меня отлично работает (если вам нужно больше примеров, скажите мне)

$router = Zend_Controller_Front::getInstance()->getRouter();
echo $router->assemble(array('questionId' => 1, 'questionSlug' => 'testing-testing', 'siteSlug' => 'programming'), 'question');
person Vitor Almeida    schedule 17.05.2012