所以我一直在研究一个生活在域根目录上的应用程序,现在必须处理/ admin。因此,domain.com/[resource]
等网址现在应为domain.com/admin/[resource]
。之前我没想过这么好,因为我认为这对Laravel来说非常简单。毕竟,这是没有硬编码路线的主要原因之一,对吧?
所以我的routes.php文件看起来像:
Route::group(['before' => 'auth'], function() {
Route::resource('books', 'BooksController');
... more resources here ...
});
通过文档,我发现'prefix' => 'admin'
可以解决问题:
Route::group(['prefix' => 'admin', 'before' => 'auth'], function() {
Route::resource('books', 'BooksController');
... more resources here ...
});
但事实证明,每个路线名称都会从books.{action}
更改为admin.books.{action}
,这需要我更改整个应用。 Regexing会很危险,手动操作会很烦人。 Laravel应该帮助这个!或者我错过了什么?
答案 0 :(得分:2)
这是未经测试的,但在查看resource controllers的文档后,似乎您可以手动设置其名称。我假设Laravel自动命名空间分组资源控制器路由以避免名称冲突,但是您可以覆盖它以避免返回应用程序的其余部分(只是要注意将来的名称冲突):
Route::resource(
'books',
'BooksController',
array(
'names' => array(
'index' => 'photo.index',
'create' => 'photo.create',
'store' => 'photo.store',
'show' => 'photo.show',
'edit' => 'photo.edit',
'update' => 'photo.update',
'destroy' => 'photo.destroy',
)
)
);
更短的方法:
只需在routes.php
文件的顶部定义一个快速方法,即可缩短创建路径名数组的重复性任务。仍然不是最好的解决方案,但我相信它是唯一可以解决Laravel如何设置的问题。
function createRouteNames($resource) {
$names = array();
$types = ['index', 'create', 'store', 'show', 'edit', 'update', 'destroy'];
foreach($types as $type) {
$names[$type] = $resource . '.' . $type;
}
return $names;
}
Route::resource('books', 'BooksController', ['names' => createRouteNames('books')]);
注意: [] === array()
旧版PHP可能不支持,这意味着您可能需要使用旧语法替换它们。