change URL with zend


change URL with zend

我在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/'
    )
    );
}

您的定义似乎是home route 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'
    )
);

标准路由器Zend_Controller_Router_Rewrite默认使用匹配name:module/:controller/:action请求的路由。你可以通过调用

来禁用它
$router->removeDefaultRoutes();

会使路由器只根据你定义的路由工作。然后,您应该能够像这样访问该模块:

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