Zend 2重定向与toRoute无法正常工作

时间:2015-03-31 16:01:08

标签: php redirect controller routes zend-framework2

为什么Zend 2会出现!@#(#(!#@??

好的,所以我正在努力让简单的重定向工作。我有一个名为'listitems'的控制器,其动作叫做'editlistitem'。用手拉雪橇敲了几个小时后,我终于得到了工作表格和验证工作以及对Doctrine的保湿工作,这样我就可以保存结果。

最后一步是将用户重定向到'showlistitem'操作,其中包含跟踪它的id。 (完整路径子路径是'listitem / showlistitem / 2',其中2是我想看的id)

我试过了:

$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,其中包含指向操作的子路由。我可以通过手动输入直接转到网址,它工作正常。如何在 bleep 中让Zend将用户从动作重定向到该路由?

1 个答案:

答案 0 :(得分:3)

The Redirect plugin提供的toRoute方法需要将route name作为参数传递。这是它的解释:

  

toRoute (string $ route = null,array $ params = array(),array $ options = array(),boolean $ reuseMatchedParams = false)

     

使用提供的$params$options重定向到指定路线,以汇总网址。

给出这个简单的路由配置示例:

//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));

希望这可以提供帮助