2015-03-31 3 views
0

Почему Zend 2 такая [email protected]#(#(!#@??Zend 2 редирект с toRoute не работает

ОК, так что я пытаюсь получить простой редирект работает. У меня есть контроллер под названием «listitems» с действием «editlistitem». Через несколько часов после того, как он ударил его ручными салазками, я, наконец, получил форму для работы и проверки работоспособности и гидратации до Учения, чтобы я мог сохранить результат.

Последний шаг - перенаправить пользователя в действие «showlistitem», которое включает в себя идентификатор, завершающий его. (Полный путь к югу путь «ListItem/showlistitem/2», где 2 ид я хочу видеть)

Я попытался:

$this->redirect()->toRoute('/listitem/showlistitem/2'); 
$this->redirect()->toRoute('listitem/showlistitem/2'); 
$this->redirect()->toRoute('showlistitem/2'); 
$this->redirect()->toRoute('listitem/showlistitem', array('id' => 2)); 
$this->redirect()->toRoute('listitem-showlistitem', array('id' => 2)); 

Ни один из них Флиппин работа! (все они не возвращаются)

Путь к контроллеру находится в modules.config.php с дочерним маршрутом к действию. Я могу перейти непосредственно к URL-адресу, набрав его вручную, и он отлично работает. Как в bleep ли я получаю Zend для перенаправления пользователя на этот маршрут из действия?

+1

От второго до последнего выглядит как правильный синтаксис. Можете ли вы добавить конфигурацию маршрутизации к вопросу, если он не работает? –

+2

Если вы действительно хотите перенаправить URL-адрес, используйте _ $ this-> redirect() -> toUrl ('/ listitem/showlistitem/2'); _. В противном случае используйте ответ @ blackbishop. – danopz

ответ

3

Метод toRoute, предоставляемый The Redirect plugin, нуждается в route name, который будет передан как параметр. Это его Дайте описание:

toRoute (строка $ маршрутные = NULL, массив $ PARAMS = массив(), массив $ вариантов = Array(), логическое значение $ reuseMatchedParams = ложь)

перенаправляет на с использованием предоставленных $params и $options, чтобы собрать URL-адрес.

Учитывая этот простой пример конфигурации маршрута:

//module.config.php 

'router' => array(
    'routes' => array(
     'home' => array(
      'type' => 'Segment', 
      'options' => array(
       'route' => '/', 
       'defaults' => array(
        'controller' => 'index', 
        'action'  => 'index', 
       ), 
      ), 
     ), 
     'app' => array(
      'type' => 'Literal', 
      'options' => array(
       'route' => '/app', 
       'defaults' => array(
        'controller' => 'index', 
        'action'  => 'index', 
       ), 
      ), 
      'may_terminate' => true, 
      'child_routes' => array(
       'default' => array(
        'type' => 'Segment', 
        'options' => array(
         'route' => '/[:controller[/:action[/:id]]]', 
         'constraints' => array(
          'controller' => '[a-zA-Z][a-zA-Z0-9_-]*', 
          'action'  => '[a-zA-Z][a-zA-Z0-9_-]*', 
          'id'=>'[0-9]+', 
         ), 
        ), 
       ), 
      ), 
     ), 
    ), 
), 

Это перенаправление работает:

return $this->redirect()->toRoute('app/default', 
      array('controller'=>'controller-name', 'action'=>'action-name', 'id'=>$id)); 

В вашем случае, это будет работать:

return $this->redirect()->toRoute('app/default', 
      array('controller'=>'listitem', 'action'=>'showlistitem', 'id'=>2)); 

Надеется, что это может помочь

+0

Вы экономите мой день – vietnguyen09

Смежные вопросы