Маршрутизация URL началась со специального символа - PullRequest
4 голосов
/ 10 апреля 2011

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

Например, см. Ниже два маршрута URL:

mysite.com/~user

и

mysite.com/admin

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

Ответы [ 2 ]

1 голос
/ 10 апреля 2011

Попробуйте и используйте это в вашей начальной загрузке

// 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.

0 голосов
/ 10 апреля 2011

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

Итак, скажем, mod_rewrite преобразует это: mysite.com/~user

к этому: mysite.com/index.php?path=~user

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

$path = $_GET['path'];

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

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