用zend更改URL

时间:2014-06-17 17:11:53

标签: php regex zend-framework

我在zend框架中有一个模块,我可以通过这个URl访问:www.example.com/questionnaire/

我想将URl中的questionnaire更改为questionnaire-test

这是我从Bootsrap.php文件中提取的代码,但无法解决我需要更改的内容。

if(!in_array('backoffice', $layout) && (in_array('questionnaire', $layout))){

    $langRoute = new Zend_Controller_Router_Route(
        ':lang/',
         array(
            'lang' => 'fr',
         )
    );

    $defaultRoute = new Zend_Controller_Router_Route(
        ':controller/:action',
        array(
            'module'=>'questionnaire',
        'controller'=>'index',
        'action'=>'index'
        )
    );


    $defaultRoute = $langRoute->chain($defaultRoute);

    $router->addRoute('langRoute', $langRoute);
    $router->addRoute('defaultRoute', $defaultRoute);
    /*---------------------------------*/
    $router->addRoute('home',
        new Zend_Controller_Router_Route_Regex(
            '([a-z]{2})/',
        array(
            'module'=>'questionnaire',
        'controller'=>'index',
        'action'=>'index'
            ),
        array(
            1 => 'lang',
        ),
        '%s/'
    )
    );
}

2 个答案:

答案 0 :(得分:0)

您的定义似乎是主路线www.example.com/en/而不是www.example.com/en/questionnaire/。 如果您正在寻找www.example.com/en/questionnaire-test/

,则正确的定义应如下所示
$router->addRoute('questionnaire',
    new Zend_Controller_Router_Route_Regex(
        '([a-z]{2})/questionnaire-test',
        array(
            'module'=>'questionnaire',
            'controller'=>'index',
            'action'=>'index'
        ),
        array(
            1 => 'lang',
        ),
       '%s/questionnaire-test'
    )
);

答案 1 :(得分:0)

标准路由器Zend_Controller_Router_Rewrite默认使用将按名称匹配的路由:module /:controller /:action request。您可以通过调用

来禁用此功能
$router->removeDefaultRoutes();

这应该使路由器仅基于您定义的路由工作。然后你应该能够像这样到达模块:

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