路由的Zend反向匹配返回当前URL

我正在使用Zend Framework,并尝试设置一些自定义路由.
这些在分发期间似乎工作正常,但是反向匹配根本不起作用.

这些是我设置的路线.

$router->addRoute('category', new Zend_Controller_Router_Route(
    'categories/:category',
    array(
        'controller' => 'category',
        'action' => 'modify',
    )
));

$router->addRoute('categories', new Zend_Controller_Router_Route_Static(
    'categories',
    array(
        'controller' => 'category',
        'action' => 'index'
    )
));

如果现在转到http://example.com/categories,将执行正确的控制器和操作(category.index).如果转到http://example.com/categories/5,则会出现以下错误:

Fatal error: Uncaught exception 'Zend_Controller_Router_Exception' with 
message 'category is not specified'

将默认值添加到:category可以解决此问题,原因是(建议).
但这不是主要问题.

每当我的应用程序执行$​​this-> url(…)时,返回的值始终是当前URL.因此,在http://example.com/categories上,如果我运行

echo $this->url(
    array('controller' => 'category', 'action' => 'modify', 'category' => 5)
);

返回值是http://example.com/categories.我完全陷入了困境.

即使我尝试绕过默认路由器并执行此操作,问题仍然存在

$router->removeDefaultRoutes();
$router->addRoute('default', new Zend_Controller_Router_Route(
    '*', 
    array('controller' => 'index', 'action' => 'index')
));

对Zend路由有更多经验的人是否想对此有所了解?

干杯,
乔恩

解决方法:

尝试更改此行

echo $this->url(array('controller' => 'category', 'action' => 'modify', 'category' => 5))

进入

echo $this->url(array('controller' => 'category', 'action' => 'modify', 'category' => 5), 'category')

第二个参数是url函数应使用的路由名称.如果未通过,则帮助程序将使用当前路线.

@编辑

经过更深入的研究,我找到了解决您问题的另一种解决方案,如果您不想每次都通过路由器名称,则代码应如下所示:

$router->addRoute('category', new Zend_Controller_Router_Route(
    'categories/:id',
    array(
        'controller' => 'category',
        'action' => 'modify',
        'id' => 0
    ),
    array(
      'id' => '\d+'
    )
 ));

$router->addRoute('categories', new Zend_Controller_Router_Route_Static(
    'categories',
    array(
        'controller' => 'categories',
        'action' => 'index'
    )
)); 

这将设置路由器部分,现在在视图中调用url helper.

<?php echo $this->url(array('controller' => 'category', 'action' => 'modify', 'id' => 5), null, true);?><br/>
<?php echo $this->url(array('controller' => 'category', 'action' => 'index'), null, true);?><br/>

输出应为:

/ categories / 5

/类别

上一篇:Laravel:PHP Artisan Make:Auth不创建路由


下一篇:Poket: Elastic Ephemeral Storage for Serverless Analytics