2012-05-18 5 views
12

Я следующий сценарий перенаправления в моем контроллере (Zend Framework 2)Набора параметры URL в перенаправлении в Zend Framework v2

return $this->redirect()->toRoute('default', array(
         'controller' => 'admin', 
         'action' => 'index' 
)); 

В настоящее время перенаправление localhost/zf2/public/admin/index

Как я могу переадресовать с дополнительным параметром?

Как:

localhost/zf2/public/admin/index/update/1

или localhost/zf2/public/admin/index/page/2

Я попытался это:

return $this->redirect()->toRoute('default', array(
         'controller' => 'admin', 
         'action' => 'index' 
          'param' => 'updated/1' 
         )); 

Но перенаправляется localhost/ttacounting/public/admin/index/updated%2F1

ответ

18

Это один работает, например. Маршрут сценарий

$this->redirect()->toRoute('myaccount', array(
    'controller' => 'admin', 
    'action' => 'index', 
    'param1' =>'updated', 
    'param2'=>'1' 
)); 

Затем, установив параметр в module.config.php

'myaccount' => array(
    'type' => 'Segment', 
    'options' => array(
    'route' => '/myaccount[/:action][/:param1][/:param2]', 
    'defaults' => array(
      'controller' => 'Main\Controller\MyAccount', 
      'action'  => 'index', 
     ), 
    ), 
), 

Это приведет вас к MyAccountController, indexAction с param1 = 'обновляется' и param2 = '1'. Но в вашем примере случае действие должно быть обновлено с именем параметра 'update' и значением параметра '1'

+0

Это работает. Однако я хотел бы отметить, что вам не нужно указывать контроллер в массиве. Маршрут, который вы установили в module.config.php, делает это для вас. Вам нужно только действие и правильные параметры. – spetz83

8

Это работает для меня.

Маршрут:

'user_view' => array(
    'type' => 'Segment', 
    'options' => array(
     'route' => '/user/view[/:user_id]', 
     'defaults' => array(
      'controller' => 'user', 
      'action'  => 'viewUser', 
     ), 
    ), 
), // End of user_view route 

И Перенаправление от контроллера:

return $this->redirect()->toRoute('user_view', array('user_id'=>$user_id)); 

Обратите внимание, что ключ массива в операторе перенаправления соответствует участку маршрута: [/: user_id] = 'user_id' => $ user_id

+0

Большое спасибо им будет проверить это сегодня –

1

Это заявление перенаправляет вас на localhost/ведет/edit/112345:

return $this->redirect()->toRoute('leads', array(
       'action' => 'edit', 
       'id' => 112345 
      )); 

id - параметр, который я ожидаю в editAction.

Надеюсь, это поможет.

0

Попробуйте этот маршрут вместо предыдущего одного

return $this->redirect()->toRoute('default', [ 
    'controller' => 'admin', 
    'action' => 'index' 
    'updated' => '1' 
]); 
0

Я пробовал некоторые из вышеупомянутых решений, но ни один из них не работал на меня. Я пришел со следующим.

//Return to specific product pricing 
return $this->redirect()->toRoute('showpricing', array('id' => $form_values['id'])); 


    /* show pricing */ 
      'showpricing' => array(
       'type' => 'Zend\Mvc\Router\Http\Segment', 
       'options' => array(
        'route' => '/product/showpricing[?id=:id]', 
        'defaults' => array(
         'controller' => 'Product\Controller\Product', 
         'action'  => 'showpricing', 
       ) 
      ) 
     ), 

Надеюсь, это поможет кому-то.

0

Другой способ передать его в качестве третьего параметра (протестировано на ZF3), вместо того, чтобы обновить маршрут:

$this->redirect()->toRoute('dashboard', [], ['query' => ['welcome' => 1]]);