定义一些路由后,Zend Framework中的默认路由

时间:2012-05-16 11:26:31

标签: php zend-framework routing

我有一段时间以来一直在写一个项目,我使用了默认路由,即:module \:controller:\:action。 过了一段时间,我在配置中添加了一些路由器,如:

resources.router.routes.page.route = "page/:slug"
resources.router.routes.page.defaults.module = "default"
resources.router.routes.page.defaults.controller = "pages"
resources.router.routes.page.defaults.action = "view"
resources.router.routes.page.defaults.slug = ""

但是,之后,当我点击视图URL帮助器生成的某个链接时,其中一条新路由忽略了一些给定的参数。例如,我有路线:

resources.router.routes.project.route = "project/:slug"
resources.router.routes.project.defaults.module = "projects"
resources.router.routes.project.defaults.controller = "projects"
resources.router.routes.project.defaults.action = "view"
resources.router.routes.project.defaults.slug = ""

如果我去链接/项目/测试,那么链接如下:

$this->url(
    array('module' => 'admin', 'action' => 'list-users', 'controller' => 'users')
, null,true
);

将指向“/ project”

是否有可能在自定义路由之上维护默认路由?我可以添加一些与默认路由器相同的默认路由器吗?这可能很简单,但我可能会错过这一点。谢谢你的帮助。

我添加了类似的内容,但没有效果:

resources.router.routes.default.route = ":module/:controller/:action"
resources.router.routes.default.defaults.module = "default"
resources.router.routes.default.defaults.controller = "pages"
resources.router.routes.default.defaults.action = "view"
resources.router.routes.default.defaults.slug = ""

2 个答案:

答案 0 :(得分:0)

为了设置自定义路由,您需要获取路由器组件并将路由传递给它。

这就是我在我正在进行的项目中所做的事情。在Bootstrap类中,创建以下函数

protected function _initRoutes()
{
    $this->bootstrap('frontcontroller');
    $front = Zend_Controller_Front::getInstance();
    $router = $front->getRouter();
    $myRoutes = new Zend_Config_Ini(APPLICATION_PATH . '/configs/routes.ini','production');
    $router->addConfig($myRoutes,'routes');

这会调用前端控制器并从中获取路由器。然后我将路由配置传递给它。

我希望这能回答你的问题。

答案 1 :(得分:0)

问题是url helper的选项如下:

url($urlOptions, $name, $reset)

因此,当您将$name设置为null时,会使用当前路线('project')。事件设置$resettrue不会有所帮助。将null替换为'default',它应该有效。