2

我有一个插件需要覆盖 / 的默认路由

我尝试过的文件位于 APP/Plugin/Install/Config/routes.php

<?php
Router::connect('/', array('plugin' => 'install', 'controller' => 'installer', 'action' => 'index'));

哪个不起作用。我还在我的引导程序中加载所有插件。CakePlugin::loadAll();

我错过了什么吗?

[更新。该文件需要覆盖 APP/Config/routes.php 中的主要 routes.php 文件。显然更新主路由文件有效并显示正确的页面,但我试图覆盖这个文件而不是直接修改它。]

4

3 回答 3

2

我没有尝试覆盖插件的默认路由 - 我有普通控制器 - 但我认为你需要'plugin'=>'install'或在你的数组中。

编辑: 手册中关于插件的这一点可能适用,我认为您的 loadAll 应该如下所示:

CakePlugin::loadAll(array(
    'Install' => array('routes' => true)
));
于 2012-12-16T08:38:07.360 回答
1

如果你想路由到一个插件,你应该指定它,Cake 不会猜测你想要什么插件。

Router::connect('/', array('plugin' => 'install', 'controller' => 'installer', 'action' => 'index'));
于 2012-12-16T14:11:13.400 回答
1

稍后添加的路由将被第一次定义的路由覆盖。

例如,路由'/'通常在 app/config/routes.php 中定义,如果你想从'app/plugin/YOURPLUGIN/config/routes.php'覆盖它,你需要使用'Router::promote' .

请参阅有关 Router::promote 的文档

例如 app/plugin/YOURPLUGIN/config/routes.php

Router::connect(
'/',
array(
    'plugin' => 'YOURPLUGIN',
    'controller' => 'YOURPLUGIN_CONTROLLER',
    'action' => 'index'
));
Router::promote();

这会将插件的路由放在'/'的原始路由之前,因此首先匹配它。

于 2014-07-29T14:56:23.703 回答