CakePHP 3.x: 插件的所有路径
CakePHP 3.x: all routes to the plugin
这不是一个真正的问题,我需要确认才能知道我是否理解我正在研究的内容(CakePHP 的路由)。
我有插件MyPlugin
。默认情况下,所有请求都应定向到插件,所以我希望插件名称不要出现在 url.
例如:
/pages
应解析为:
['controller' => 'pages', 'action' => 'index', 'plugin' => 'MyPlugin']
同样适用于 "admin" 前缀。
例如:
/admin/pages
应解析为:
['controller' => 'pages', 'action' => 'index', 'plugin' => 'MyPlugin', 'prefix' => 'admin']
简而言之,您必须想象应用程序(因此 MyPlugin
除外)没有控制器。
我学习了routes (particularly this and this) 现在我想知道这段代码是否正确:
Router::defaultRouteClass('InflectedRoute');
Router::prefix('admin', function ($routes) {
$routes->plugin('MeCms', ['path' => '/'], function ($routes) {
$routes->fallbacks();
});
});
Router::scope('/', ['plugin' => 'MeCms'], function ($routes) {
$routes->fallbacks();
});
根据我的测试,这似乎有效。但由于路由与 CakePHP 相比发生了很大变化 2.x,我想确认你已经理解了。
谢谢。
编辑
感谢 PGBI,此代码应该 是最终的:
Router::scope('/', ['plugin' => 'MeCms'], function ($routes) {
Router::connect('/admin', ['controller' => 'Pages', 'action' => 'index', 'plugin' => 'MeCms', 'prefix' => 'admin']);
$routes->prefix('admin', function ($routes) {
$routes->fallbacks();
});
$routes->fallbacks();
});
是的,没错。我认为你可以做得更短(待测试,但你明白了):
Router::scope('/', ['plugin' => 'MeCms'], function ($routes) {
$routes->prefix('admin', function ($routes) {
$routes->fallbacks();
});
$routes->fallbacks();
});
编辑:
将主页添加到您的管理部分:
Router::scope('/', ['plugin' => 'MeCms'], function ($routes) {
$routes->prefix('admin', function ($routes) {
$routes->connect('/', ['controller' => 'Pages', 'action' => 'index']);
$routes->fallbacks();
});
$routes->fallbacks();
});
你不需要重复['plugin' => 'MeCms']
或["prefix" => "admin"]
,因为它已经定义过了。
这不是一个真正的问题,我需要确认才能知道我是否理解我正在研究的内容(CakePHP 的路由)。
我有插件MyPlugin
。默认情况下,所有请求都应定向到插件,所以我希望插件名称不要出现在 url.
例如:
/pages
应解析为:
['controller' => 'pages', 'action' => 'index', 'plugin' => 'MyPlugin']
同样适用于 "admin" 前缀。
例如:
/admin/pages
应解析为:
['controller' => 'pages', 'action' => 'index', 'plugin' => 'MyPlugin', 'prefix' => 'admin']
简而言之,您必须想象应用程序(因此 MyPlugin
除外)没有控制器。
我学习了routes (particularly this and this) 现在我想知道这段代码是否正确:
Router::defaultRouteClass('InflectedRoute');
Router::prefix('admin', function ($routes) {
$routes->plugin('MeCms', ['path' => '/'], function ($routes) {
$routes->fallbacks();
});
});
Router::scope('/', ['plugin' => 'MeCms'], function ($routes) {
$routes->fallbacks();
});
根据我的测试,这似乎有效。但由于路由与 CakePHP 相比发生了很大变化 2.x,我想确认你已经理解了。
谢谢。
编辑
感谢 PGBI,此代码应该 是最终的:
Router::scope('/', ['plugin' => 'MeCms'], function ($routes) {
Router::connect('/admin', ['controller' => 'Pages', 'action' => 'index', 'plugin' => 'MeCms', 'prefix' => 'admin']);
$routes->prefix('admin', function ($routes) {
$routes->fallbacks();
});
$routes->fallbacks();
});
是的,没错。我认为你可以做得更短(待测试,但你明白了):
Router::scope('/', ['plugin' => 'MeCms'], function ($routes) {
$routes->prefix('admin', function ($routes) {
$routes->fallbacks();
});
$routes->fallbacks();
});
编辑: 将主页添加到您的管理部分:
Router::scope('/', ['plugin' => 'MeCms'], function ($routes) {
$routes->prefix('admin', function ($routes) {
$routes->connect('/', ['controller' => 'Pages', 'action' => 'index']);
$routes->fallbacks();
});
$routes->fallbacks();
});
你不需要重复['plugin' => 'MeCms']
或["prefix" => "admin"]
,因为它已经定义过了。