CakePHP:为admin插件创建全局路由

时间:2013-09-19 16:49:47

标签: php cakephp plugins routes admin

所以我开始将我们网站的管理面板作为插件。我可以将每个请求(例如domain.com/admin或domain.com/admin/users或domain.com/admin/pages/edit/5)重定向到管理插件中的相应控制器和操作。 像这样:

 Router::connect('/admin', array('plugin' => 'admin', 'controller' => 'index', 'action' => 'index'));
 Router::connect('/admin/users/list', array('plugin' => 'admin', 'controller' => 'users', 'action' => 'list'));

但是这意味着我必须为几乎每个URL写单独的路由???或者实际上 - 对于每个动作......那么 - 有没有办法在全球范围内设置它? ......

例如:

 Router::connect('/admin/users/*', array('plugin' => 'admin', 'controller' => 'users'));

甚至更好:

 Router::connect('/admin/*', array('plugin' => 'admin'));

因为最后两个例子根本不起作用......

编辑:CakePHP版本是目前最新版本 - 2.4.1。

1 个答案:

答案 0 :(得分:1)

通常你不必为插件创建这样的路由,基本映射开箱即用,即如果你的插件名为admin,那么/admin/users/list将自动映射到插件{ {1}},控制器admin,操作users

例外是您的list路由,默认情况下会在/admin上查找index。因此,要在AdminController上映射到index,您需要一个自定义路线,例如您问题中的路线:

IndexController

除此之外,它应该可以正常工作,以防您没有任何其他先前的规则来覆盖默认行为,例如Router::connect('/admin', array('plugin' => 'admin', 'controller' => 'index', 'action' => 'index')); 。如果这样的规则并且您无法更改它们,那么这就是您可以连接插件的基本路线的方法:

Router::connect('/*', ...)

请注意,这需要在之前放置覆盖默认行为的其他路由!

另见http://book.cakephp.org/2.0/en/development/routing.html

在旁注中,Router::connect('/admin/:controller/:action/*', array('plugin' => 'admin')); Router::connect('/admin/:controller/*', array('plugin' => 'admin', 'action' => 'index')); Router::connect('/admin/*', array('plugin' => 'admin', 'controller' => 'index', 'action' => 'index')); 作为操作名称可能不起作用,这会导致解析器错误,因为listreserved keyword。因此,如果您希望在URL中使用list作为操作名称,那么这不仅仅是一个示例,您还需要额外的路由。