Zend \ View \ Helper \ Url不解析任何路由

时间:2013-11-08 17:48:09

标签: php zend-framework2 url-routing

我无法通过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]路由。

1 个答案:

答案 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)}