我有一个CakePHP 3.5网站。有必要设置没有像/ pages / slug这样的url前缀的slugs,所以我写了以下规则:
$routes->connect(
'/:slug',
['controller' => 'Pages', 'action' => 'redirectPage']
)
->setMethods(['GET', 'POST'])
->setPass(['slug'])
->setPatterns([
'slug' => '[a-z0-9\-_]+'
]);
它很好用,但在某些情况下我希望cakePHP默认路由(Controller / Action / Params)。例如,我想要/ admin / login来调用' login'行动在' AdminController'。 我有两个不需要精确路线的想法,但我不能让它们中的任何一个起作用:
创建' / admin /:action'路由规则,但后来我不能使用:action作为动作变量。它会导致错误。
$routes->connect(
'/admin/:action',
['controller' => 'Admin', 'action' => ':action']
)
有什么想法吗? 感谢
答案 0 :(得分:4)
您可以将prefix
用于管理员限制区域。
例如:
Router::prefix('admin', function ($routes) {
$routes->connect('/', ['controller' => 'Users', 'action' => 'login']);
$routes->fallbacks(DashedRoute::class);
});
$routes->connect('/:slug' , [
'controller' => 'Pages',
'action' => 'display',
'plugin' => NULL
], [
'slug' => '[A-Za-z0-9/-]+',
'pass' => ['slug']
]);
现在,例如,路径/admin/dashboard/index
将执行Admin
“子名称空间”\App\Controller\Admin\DashboardController::index()
在文档中很好地描述了它:Image Asset Studio
答案 1 :(得分:1)
试试这个:
$routes->connect(
'/admin/:action',
['controller' => 'Admin'],
['action' => '(login|otherAllowedAction|someOtherAllowedAction)']
);
此外,你的slug路线似乎没有抓住/admin/:action
路线,那里不允许使用b / c破折号:[a-z0-9\-_]+