изменить URL с помощью zend

#php #regex #zend-framework

#php #регулярное выражение #zend-framework

Вопрос:

У меня есть модуль в zend framework, к которому я могу получить доступ с помощью этого URL : www.example.com/questionnaire/

Я хотел бы изменить questionnaire URL-адрес на questionnaire-test .

Это код, который я извлек из Bootsrap.php файла, но не могу понять, что мне нужно изменить.

 if(!in_array('backoffice', $layout) amp;amp; (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/'
    )
    );
}
  

Ответ №1:

Кажется, что ваше определение является домашним маршрутом 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. Я обновил свой вопрос, добавив больше кода, который может вам подойти для домашнего маршрута. С помощью предоставленного вами кода мне удается получить доступ к модулю, www.example/questionnaire/questionnaire-test но я не могу изменить первое появление «вопросника»

2. Вы уверены, что это единственные определения маршрута? Например, в плагине контроллера могут быть другие определения..

Ответ №2:

Стандартный маршрутизатор 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')));