Как создать foo.com/user в Zend? - PullRequest
       9

Как создать foo.com/user в Zend?

0 голосов
/ 19 декабря 2008

Ну, мне нужно сделать так, чтобы любой пользователь мог иметь имя foo.com/user на моем сайте, где я использую Zend Framework.

Дело в том, что я хочу, чтобы foo.com/login и другие контроллеры продолжали работать так, как они работают, поэтому я уже проверяю, что ни один пользователь не может быть назван в качестве одного из контроллеров, которые я собираюсь использовать. Невозможно изменить htaccess, иначе конфигурация mvc не будет работать. Так что я использую маршрутизатор.

Я знаю, что если я использую что-то вроде:

$routes = array();  
        $routes['entry']  = new Zend_Controller_Router_Route_Regex('SOME REGEX HERE', 
            array(  
                'controller' => 'profile',  
                'action'     => 'show'  
            ),  
            array(  
                'id' => "dsadsa", // maps first subpattern "(\d+)" to "id" parameter  
                1 => 'id' // maps first subpattern "(\d+)" to "id" parameter  
            )  
        );  

$router->addRoutes($routes); 

я могу сделать так, чтобы все, что соответствует регулярному выражению, было перенаправлено, но я не знаю, есть ли лучший способ (каким-то образом соединяя 2 маршрутизатора), где мне не нужно фактически перечислять мои контроллеры в очень очень большом ИЛИ.

Есть идеи?

Ответы [ 2 ]

0 голосов
/ 21 декабря 2008

Примерно так должно работать:

$routes = array();  

$routes['entry'] = new Zend_Controller_Router_Route(
    ':userName', 
    array(  
        'controller' => 'profile',  
        'action'     => 'show'  
    )
);

Затем добавьте все остальные маршруты для / login, / logout и т. Д. Как сказал Tim , Zend сопоставляет маршруты в обратном порядке, поэтому он попытается сопоставить ваш «белый список» маршрутов. до окончательной отправки его на ваш маршрут "username".

Это нарушит любой тип проверки ошибок, которую Zend делает, чтобы убедиться, что контроллер / действие существует, так как все будет перенаправлено в / profile / show, если нет совпадений маршрутов.

Однако всего этого можно легко избежать, если бы вы могли просто разобраться с foo.com/user/.

0 голосов
/ 19 декабря 2008

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

$router->addRoute('user', new Zend_Controller_Router_Route('controller/:var'));

Zend попытается сопоставить запрос с указанными маршрутами в обратном порядке. Если я запрашиваю не совпадает ни с одним из ваших маршрутов контроллера, он будет пытаться сопоставить его с вашим маршрутом регулярного выражения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...