我使用Skeleton应用程序和模块创建了一个基本的Zend Framework 2应用程序,尽管我遇到了路由问题但似乎无法解决它。
在我的模块中,它松散地基于Zend Framework网站上的新Quickstart模块,我在module.config.php中有以下路由
'router' => array(
'routes' => array(
'blog' => array(
'type' => 'Literal',
'options' => array(
// Change this to something specific to your module
'route' => '/blog',
'defaults' => array(
// Change this value to reflect the namespace in which
// the controllers for your module are found
'__NAMESPACE__' => 'Blog\Controller',
'controller' => 'View',
'action' => 'index',
),
),
'may_terminate' => true,
'child_routes' => array(
// This route is a sane default when developing a module;
// as you solidify the routes for your module, however,
// you may want to remove it and replace it with more
// specific routes.
'default' => array(
'type' => 'Segment',
'options' => array(
'route' => '[/:controller[/:action]]',
'constraints' => array(
'controller' => '[a-zA-Z][a-zA-Z0-9_-]*',
'action' => '[a-zA-Z][a-zA-Z0-9_-]*',
),
'defaults' => array(
),
),
),
),
),
),
),
使用标准模块,控制器和操作URL请求时,此路由似乎正常工作:
blah.com/blog/post/view
当我遇到问题时,我尝试通过网址传递一些数据:
blah.com/blog/post/view/id/1
两个URL中的后一个导致404.我猜我需要一个子路由来允许在URL上传递数据,尽管我仍然坚持我需要的东西。有人能指出我正确的方向吗?我浏览过参考指南,虽然我似乎无法跨越界限。
任何帮助表示感谢。
答案 0 :(得分:2)
您必须在路线中添加可选细分。同时为其添加默认值:试试这个:
'default' => array(
'type' => 'Segment',
'options' => array(
'route' => '[/:controller[/:action[/id[/:idvar]]]]',
'constraints' => array(
'controller' => '[a-zA-Z][a-zA-Z0-9_-]*',
'action' => '[a-zA-Z][a-zA-Z0-9_-]*',
),
'defaults' => array(
'idvar' => '0'
),
),
),
并在您的控制器操作中,尝试:
$id = $this->params('idvar')
;
检索idvar
值。
答案 1 :(得分:2)
如果您需要多个可选参数且可以任意随机组合提供的参数(例如pageNumber = 2,参与=活动),您需要添加类型查询的子路由,并且可以完全提供GET参数灵活:
使用此合成代码可以使用url视图助手构建适合以下示例的url: $ this-> url('event / index / query',array('o_id'=> 1,'participation'=>'active','pageNumber'=>'2'));
'routes' => array(
'event' => array(
'type' => 'literal',
'options' => array(
'route' => '/event',
'defaults' => array(
'controller' => 'cebEvent.eventController',
'action' => 'index',
),
),
'may_terminate' => true,
'child_routes' => array(
'index' => array(
'type' => 'segment',
'options' => array(
'route' => '/index[/:o_id]',
'defaults' => array(
'controller' => 'eventController',
'action' => 'index',
),
),
'may_terminate' => true,
'child_routes' => array(
'query' => array(
'type' => 'Query',
),
),
),