使用CakePHP进行插件路由

时间:2012-12-16 08:04:01

标签: php cakephp cakephp-2.0

我有一个插件需要覆盖/

的默认路由

我试过的文件是APP / Plugin / Install / Config / routes.php

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

哪个不起作用。我也在我的bootstrap中加载所有插件。 CakePlugin::loadAll();

我错过了什么吗?

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

3 个答案:

答案 0 :(得分:2)

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

修改 This bit about plugins in the manual可能适用,我认为你的loadAll应该是这样的:

CakePlugin::loadAll(array(
    'Install' => array('routes' => true)
));

答案 1 :(得分:1)

如果你想路由到插件你应该指定它,Cake不会猜到你想要的插件。

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

答案 2 :(得分:1)

稍后添加的路由将被首先定义的路由覆盖。

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

请参阅documentation on Router::promote

e.g。应用程序/插件/ YOURPLUGIN /配置/ routes.php文件

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

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