Маршрутизация URL-адресов, начинающихся со специального символа

#php #zend-framework #url #url-routing

#php #zend-framework #url #url-маршрутизация

Вопрос:

В ZendFramework я хочу перенаправлять URL-адреса, начинающиеся с ~ , на специальный контроллер и действие, чтобы другие URL-адреса, начинающиеся с ~ , не работали должным образом.

Например, смотрите ниже две маршрутизации URL:

 mysite.com/~user
  

и

 mysite.com/admin
  

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

Ответ №1:

Попробуйте использовать это в вашем Bootstrap

 // Get the instance of the router
$router = Zend_Controller_Front::getInstance()->getRouter();

// Set up a new regex router to match routes starting with ~
$route = new Zend_Controller_Router_Route_Regex(
    '(^~)',
    //This route should use a 'special' controller
    array(
        'controller' => 'special',
        'action'     => 'index'
    )
);

// Add the new route to the router
$router->addRoute('archive', $route);
  

Вам понадобится вызываемый контроллер Special для ответа на запросы, направляемые на этот маршрутизатор.

Комментарии:

1. Я пробую это, и появляется сообщение об ошибке Invalid controller specified (~user) .

Ответ №2:

Не уверен насчет zend конкретно, но лучший способ сделать это — добавить таблицу хэш-поиска до того, как URL-маршрутизатор выполнит свою работу.

Итак, допустим, mod_rewrite преобразует это: mysite.com /~пользователь

к этому: mysite.com/index.php?path =~пользователь

затем вы могли бы сделать что-то вроде этого:

 $path = $_GET['path'];

$url_mod = array(
  '~user'=>'my_other_controller',
  'admin'=>'my_other_controller',
);

if(isset($url_mod[$path)) {
 $path = $url_mod[$path]; 
}
  

Комментарии:

1. Обратите внимание на вопрос, мне нужна маршрутизация URL или любой другой подход, который я могу использовать в ZendFramework.