我无法通过ZendFramework2网址视图助手解析路线
Zend\View\Helper\Url
当我尝试使用以下方法解决我的路线时:
{$route['action'] = 'install'}
{$route['id'] = $this->escapeHtml($project->__get('id'))}
{$href = $this->url('projects', $route)}
(我使用smarty3作为模板)
我的路由配置如下所示:
return array(
'router' => array(
'routes' => array(
'home' => array(
'type' => 'literal',
'options' => array(
'route' => '/',
'defaults' => array(
'controller' => 'Projects\Controller\Projects',
'action' => 'index',
),
),
),
'projects' => array(
'type' => 'literal',
'options' => array(
'route' => '/projects',
'defaults' => array(
'controller' => 'Projects\Controller\Projects',
'action' => 'index',
),
),
'may_terminate' => true,
'child_routes' => array(
'install' => array(
'type' => 'segment',
'options' => array(
'route' => '/install/[:projectId]',
'constraints' => array(
'projectId' => '[0-9]+'
),
'defaults' => array(
'controller' => 'Projects\Controller\Projects',
'action' => 'install',
'projectId' => '0'
),
),
),
'defaults' => 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(
),
),
),
),
),
...
帮助程序可以解析我的路径到/ projects 他没有看到孩子的路线。
在一些var_dumping之后,我看到我的TreeRouteStack有一个Part对象,有我想要的路径。
Zend\Mvc\Router\Http\Part#133 (9) {
protected $route => class Zend\Mvc\Router\Http\Literal#132 (2) {
protected $route => string(9) "/projects"
protected $defaults => array(2) {
'controller' => string(28) "Projects\Controller\Projects"
'action' => string(5) "index"
}
}
protected $mayTerminate => bool(true)
protected $childRoutes => NULL
protected $baseUrl => NULL
protected $requestUri => NULL
protected $routes => class Zend\Mvc\Router\PriorityList#134 (4) {
protected $routes => array(2) {
'install' => array(3) { ... }
'defaults' => array(3) { ... }
}
protected $serial => int(2)
protected $count => int(2)
protected $sorted => bool(false)
}..
不幸的是,我宣布我的路线为童路,但该部分没有任何孩子。我正在寻找的路线都在$ routes变量范围内。 在我的路由中我做错了什么,它现在分裂错了?因此,url-helper无法访问。
编辑:
如果我在没有帮助程序的情况下解析我的路由,我可以访问/ projects / install / [id]路由。
答案 0 :(得分:0)
感谢Crisp帮助找到解决方案。 "项目/安装"是必要的,但还有一个错误。
我定义了:
'constraints' => array(
'projectId' => '[0-9]+'
),
在我的路线中,只有
array('id' => $id)
在我的网址助手中。然后帮助者无法将给定的id放在路径中。
所以解决方案(对我而言)是
$this->url('projects/install', array('projectId' => $id));
或在Smarty:
{$route['projectId']= $this->escapeHtml($project->__get('id'))}
{$href = $this->url('projects/install', $route)}