Почему мои действия и параметры не отображаются в моем URL-адресе? Я использую zend 2 framework. У меня есть действие поиска и действие результатов. Ниже приведено мое действие поиска (не используя переменные при тестировании):
return $this->forward()->dispatch('Application\Controller\Index', array( 'action' => 'results', 'zip' => '12345', ));
Маршрут – это ребенок моего домашнего маршрута.
'results' => array( 'type' => 'segment', 'options' => array( 'route' => 'results[/:zip]', 'defaults' => array( 'controller' => 'Application\Controller\Index', 'action' => 'results', ), ), ),
Ниже приведен родительский маршрут
'router' => array( 'routes' => array( 'home' => array( 'type' => 'segment', 'options' => array( 'route' => '/', 'constraints' => array( 'action' => '[a-zA-Z][a-zA-Z0-9_-]*', ), 'defaults' => array( 'controller' => 'Application\Controller\Index', 'action' => 'index', ), ),
Я направляюсь к правильному виду, но url возвращает www.foo.com, а не www.foo.com/results/12345.
Кроме того, как я могу остановить запрос на отправку вперед? На странице результатов есть форма, и после пересылки эта форма снова отправляется (вызывая цикл).
Если вы хотите, чтобы браузер отображал новый URL-адрес, вам необходимо выполнить перенаправление HTTP, поскольку прямой плагин отправит новый контроллер в тот же запрос.
Замените прямой вызов вызовом плагина перенаправления.
return $this->redirect()->toRoute('home/results/route/name');
Это также решит вашу проблему с добавлением, когда HTTP-метод все еще установлен как POST (поскольку перенаправление будет GET
запросом).