ZF2 - $ this->网址和路由问题

时间:2014-11-28 11:59:50

标签: php zend-framework2 view-helpers

我已经拥有并发出了视图帮助函数this-> url(),它不会从子路径返回和url,我得到死者的白屏。当我在浏览器中手动输入网址时,路由器会很好地识别网址。

我在我的module.config.php中有这个:

'news' => array(
            'type' => 'Segment',
            'options' => array(
                'route' => '/news[/:id]',
                'constraints' => array(
                    'id'    => '[0-9]+',
                    ),
                'defaults' => array(
                    'controller' => 'Application\Controller\News',
                    'action' => 'index',
                    ),
            ),
            'may_terminate' => true,
            'child_routes' => array(
                'allnews' => array(
                    'type' => 'Segment',
                    'options' => array(
                        'route' => '[/:action[/:tab[/:page]]]',
                        'constraints' => array(
                            'action' => '[a-zA-Z][a-zA-Z0-9_-]*',
                            'tab'    => '[0-9]+',
                            'page'     => '[0-9]+',
                        ),
                        'defaults' => array(
                            'controller' => 'Application\Controller\News',
                            'action' => 'all',
                            'tab' => 1,
                            'page' => 1,
                        ),

                    ),
                ),
            ),
        ),

例如:

/news/2

正确工作并匹配父路线

/news/all/2/5

正确工作并匹配子路线。

但是当我在view-helper中使用它时,我得到了死者的白色屏幕:

 echo($this->url('news/allnews', array('action' => 'all', 'tab' => '1', 'page' => '1')));

我的问题是:它出了什么问题?我在其他视图中使用了这种方法,效果很好。

2 个答案:

答案 0 :(得分:1)

您不需要将子路由与路由器段一起使用。一段应该足够了!

'news' => array(
   'type' => 'Segment',
   'options' => array(
      'route' => '/news[/:action[/:id][/:tab][/:page]]',
      'constraints' => array(
          'id'    => '[0-9]+',
          'action' => '[a-zA-Z][a-zA-Z0-9_-]*',
          'tab'    => '[0-9]+',
          'page'     => '[0-9]+',
       ),
       'defaults' => array(
          'controller' => 'Application\Controller\News',
          'action' => 'index',
       ),
    ),
 ),

只要Defaultcontroller足以满足您的需求,您也不需要在params中使用它。一旦你需要超过1,你就会想要另一个约束来定义控制器。

现在你可以通过各种方式简单地使用url viewhelper。

  

如果您只需要默认控制器中的默认操作,则可以这样写。

$this->url('news');
  

如果您需要使用params路由到操作,您可以像这样使用viewhelper

$this->url('news', array('action' => $action, 'tab' => $tab, 'page' => $page));

理想情况下,我会使用带有路由器段的路由器文字作为子路由,因为用大量限制轰炸路由器段会很快变得混乱。

         ...
         'custom_route' => array(
            'type'    => 'Literal',
            'priority' => 1337,
            'options' => array(
                'route'    => '/custom',
                'defaults' => array(
                    '__NAMESPACE__' => 'Custom\Controller',
                    'controller'    => 'Index',
                    'action'        => 'index',
                ),
            ),
            'may_terminate' => true,
            'child_routes' => array(
                'custom_child' => 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]+',      
                        ),
                        'defaults' => array(
                        ),
                    ),
                ),
            ),
        ),
      ...

答案 1 :(得分:0)

非常肯定这不会有帮助,但一切都在您的路线中看起来正确......你试过吗

$this->url('news/allnews', array('action' => 'all', 'tab' => 1, 'page' => 1))

不知道路由资料如何处理数字上的约束并为url view helper提供字符串。

您可能需要启用错误或查看日志以找出实际错误