我已经拥有并发出了视图帮助函数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')));
我的问题是:它出了什么问题?我在其他视图中使用了这种方法,效果很好。
答案 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提供字符串。
您可能需要启用错误或查看日志以找出实际错误