如何使用Zend Route Regex将URL路由到另一个URL?

时间:2012-09-22 00:48:54

标签: php regex zend-framework zend-route

我有一个这样的网址:view_test.php?user=56

我想在这里得到它:

    $router->addRoute(
        'test',
        new Zend_Controller_Router_Route(
            'test/view/:id',
            array(
                'module' => 'test',
                'controller' => 'index',
                'action' => 'view'
            )
        )
    ); 

基本上从view_test.php?user=56/test/view/56

我不确定如何处理?

任何想法?

感谢

1 个答案:

答案 0 :(得分:0)

AFAIK,在一个路线中,你不能引用url的查询字符串内容,只是它的请求路径。但你可以做到以下几点:

添加将旧网址映射到重定向操作的路由:

$router->addRoute('view-test-redirect', new Zend_Controller_Router_Route_Static(
    'view_test.php',
    array(
        'module' => 'test',
        'controller' => 'index',
        'action' => 'view-test-redirect',
    )
);

此外,添加代表“真实”操作的路线:

$router->addRoute('view-test', new Zend_Controller_Router_Route(
    'view/test/:user',
    array(
        'module' => 'test',
        'controller' => 'index',
        'action' => 'view-test',
    )
);

操作名称view-test-redirect对应于以下操作:

public function viewTestRedirectAction()
{
    $user = (int) $this->_getParam('user', null);
    if (!$user){
        throw new \Exception('Missing user');
    }
    $this->_helper->redirector->goToRouteAndExit(array('user' => $user), 'view-test');
}

然后,您的view-test操作可以按预期方式执行操作:

public function viewTestController()
{
    $user = (int) $this->_getParam('user', null);
    if (!$user){
        throw new \Exception('Missing user');
    }
    // Read db, assign results to view, praise unicorns, etc.
}

没有经过测试,只是通过大脑倾销来证明这个想法。