Имя хоста и пользовательская маршрутизация в Zend Framework не работают вместе для меня - PullRequest
2 голосов
/ 21 ноября 2011

Я создаю приложение, которое использует маршрутизацию имени хоста для обнаружения поддоменов, таких как

user1.example.com user2.example.com

, а также имеет собственные маршруты, например user1.example.com/login

Пока это работает хорошо, но когда я добавляю собственные маршруты, они не работают.Я много искал и читал, но, похоже, чего-то не хватает.Вот что у меня получилось:

//my routes in routes.ini
[development]
routes.login.type = "Zend_Controller_Router_Route"
routes.login.route = "/login"
routes.login.defaults.controller = "user"
routes.login.defaults.action = "login"


//This part in Bootstrap file
$this->bootstrap('frontController');
$router = $this->frontController->getRouter();
$routerConfig = new Zend_Config_Ini(
    APPLICATION_PATH . '/configs/routes.ini',
    'production'
);

//I create a default route
$routeDefault = new Zend_Controller_Router_Route_Module(
 array(),
 $this->frontController->getDispatcher(),
        $this->frontController->getRequest()
);      

$router->addConfig($routerConfig, 'routes');
// hostname route 
$hostnameRoute = new Zend_Controller_Router_Route_Hostname(
        ':username.mysite.com',
        array(
        'module' => 'default',
        'controller' => 'index',
        'action' => 'index',
        )
      );
//I add the default route.
$router->addRoute('default', $routeDefault);

//I chain the routes so that all routes have subdomain routing too
foreach ($router->getRoutes() as $key => $theroute) {
$router->addRoute($key, $hostnameRoute->chain($theroute));
}

Когда я иду по пользовательскому маршруту, например http://user1.example.com/login, я получаю ошибку: «Указан неверный контроллер (логин)», что означает, что мой пользовательский маршрутне быть признанным.Я также не уверен, что способ добавления маршрута по умолчанию является правильным и необходимым.Если я удалю этот код, он не будет работать.Так что моя проблема на самом деле в том, что я хотел бы, чтобы все мои имена хостов, пользовательские маршруты и маршруты по умолчанию работали.Если вы можете определить, где я ошибаюсь, пожалуйста, помогите, я прочитал все предыдущие посты по маршрутам, цепочкам, маршрутам по умолчанию и т. Д. (Включая эту очень связанную: Как написать цепочки маршрутизации для субдомена в ZendFramework в INI-файле маршрутизации? ), но до сих пор не нашли решение.

1 Ответ

0 голосов
/ 21 июня 2012

Вы должны иметь возможность настроить маршрут, используя пользовательский параметр в маршруте:

routes.testdynamicsubdomain.type = "Zend_Controller_Router_Route_Hostname"
routes.testdynamicsubdomain.route = ":subdomain.domain.dev"
routes.testdynamicsubdomain.defaults.module = public
routes.testdynamicsubdomain.defaults.controller = index
routes.testdynamicsubdomain.defaults.action = index

Если ваш apache / hostfile и т. Д. Настроены правильно, перейдите в test.domain.dev должен загрузить действие index в ваш indexController, где вы можете получить параметр: subdomain:

echo $this->getRequest()->getParam('subdomain');

Кроме того, как вы обнаружили, порядок маршрутов очень важен. См. Также Приоритет Zend Router для получения дополнительной информации об этом.

...