0

一段时间以来,我一直在编写一个项目,并且使用了默认路由,即 :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 = ""

如果我去一个链接 /project/test 然后链接是这样的:

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

将指向“/项目”

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

我添加了这样的东西,但没有效果:

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 = ""
4

2 回答 2

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');

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

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

于 2012-05-16T12:27:06.340 回答
0

问题是 url helper 的选项如下:

url($urlOptions, $name, $reset)

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

于 2012-05-18T21:58:49.700 回答