Laravel 5.5 将控制器传递给路由组
Laravel 5.5 passing controllers to routes groups
我不知道这是否可能。假设我们有 3 个路由组来创建前缀……全部来自 root;所以,像下面这样的东西可能会有问题。
Route::group([
'prefix' => '{something}',
'middleware' => ['web', 'auth']
], function() {
});
所以,有 n 个路由组。每个组都有相同的一组路由模式。唯一的区别是用于每个组的控制器。
<?php
Route::group([
'prefix' => 'prefix1',
'middleware' => ['web', 'auth']
], function() {
$controller = '\Path\To\Controller';
Route::get('/', $controller.'@index');
Route::get('/{object}', $controller.'@handleObject');
});
Route::group([
'prefix' => 'prefix2',
'middleware' => ['web', 'auth']
], function() {
$controller = '\Path\To\Controller2';
Route::get('/', $controller.'@index');
Route::get('/{object}', $controller.'@handleObject');
});
Route::group([
'prefix' => 'prefix3',
'middleware' => ['web', 'auth']
], function() {
$controller = '\Path\To\Controller3';
Route::get('/', $controller.'@index');
Route::get('/{object}', $controller.'@handleObject');
});
我正在寻找的东西可以让我从路由组转到其他东西,将控制器传递给它。
这可能吗?我还缺少其他选择吗?
本质上,路由组由多个子组和路由组成,实际上,真的不想仅仅为了更改控制器而复制和粘贴路由。
更新
几乎希望能够做到这样的事情,我很确定这是不可能的。
Route::group([
'prefix' => ['prefix1', 'prefix2', 'prefix3'],
'middleware' => ['web', 'auth']
], function() {
$controller = null;
if ($prefix == '...') {
$controller = '\Path\To\Controller3';
} else if ($prefix '...') {
...
}
Route::get('/', $controller.'@index');
Route::get('/{object}', $controller.'@handleObject');
});
是的,有可能。
你只需要一个数组和逻辑。对于下面的示例,我在我开发的服务提供商中使用了一个配置文件。然后,只需遍历数组,Laravel 的路由器每次都会这样做。
// /config/service-config.php
$prefixes = [
'tiles',
'files',
'kites',
'foos'
];
// web.php
$controller = '\Path\To\Controller';
if (!is_null(config('service-config.prefixes'))) {
foreach (config('service-config.prefixes') as $prefix) {
Route::group([
'prefix' => $prefix
], function() use ($controller) {
Route::post('/', $controller.'@addEmailAddress');
});
Route::group([
'prefix' => $prefix .'/{foo}/bar'
], function() use ($controller) {
// ...
});
}
}
结果:
/tiles
/tiles/{foo}/bar
/files
/files/{foo}/bar
/kites
/kites/{foo}/bar
/foos
/foos/{foo}/bar
每个人都在该控制器中使用相同的控制器和方法。
我不知道这是否可能。假设我们有 3 个路由组来创建前缀……全部来自 root;所以,像下面这样的东西可能会有问题。
Route::group([
'prefix' => '{something}',
'middleware' => ['web', 'auth']
], function() {
});
所以,有 n 个路由组。每个组都有相同的一组路由模式。唯一的区别是用于每个组的控制器。
<?php
Route::group([
'prefix' => 'prefix1',
'middleware' => ['web', 'auth']
], function() {
$controller = '\Path\To\Controller';
Route::get('/', $controller.'@index');
Route::get('/{object}', $controller.'@handleObject');
});
Route::group([
'prefix' => 'prefix2',
'middleware' => ['web', 'auth']
], function() {
$controller = '\Path\To\Controller2';
Route::get('/', $controller.'@index');
Route::get('/{object}', $controller.'@handleObject');
});
Route::group([
'prefix' => 'prefix3',
'middleware' => ['web', 'auth']
], function() {
$controller = '\Path\To\Controller3';
Route::get('/', $controller.'@index');
Route::get('/{object}', $controller.'@handleObject');
});
我正在寻找的东西可以让我从路由组转到其他东西,将控制器传递给它。
这可能吗?我还缺少其他选择吗?
本质上,路由组由多个子组和路由组成,实际上,真的不想仅仅为了更改控制器而复制和粘贴路由。
更新
几乎希望能够做到这样的事情,我很确定这是不可能的。
Route::group([
'prefix' => ['prefix1', 'prefix2', 'prefix3'],
'middleware' => ['web', 'auth']
], function() {
$controller = null;
if ($prefix == '...') {
$controller = '\Path\To\Controller3';
} else if ($prefix '...') {
...
}
Route::get('/', $controller.'@index');
Route::get('/{object}', $controller.'@handleObject');
});
是的,有可能。
你只需要一个数组和逻辑。对于下面的示例,我在我开发的服务提供商中使用了一个配置文件。然后,只需遍历数组,Laravel 的路由器每次都会这样做。
// /config/service-config.php
$prefixes = [
'tiles',
'files',
'kites',
'foos'
];
// web.php
$controller = '\Path\To\Controller';
if (!is_null(config('service-config.prefixes'))) {
foreach (config('service-config.prefixes') as $prefix) {
Route::group([
'prefix' => $prefix
], function() use ($controller) {
Route::post('/', $controller.'@addEmailAddress');
});
Route::group([
'prefix' => $prefix .'/{foo}/bar'
], function() use ($controller) {
// ...
});
}
}
结果:
/tiles
/tiles/{foo}/bar
/files
/files/{foo}/bar
/kites
/kites/{foo}/bar
/foos
/foos/{foo}/bar
每个人都在该控制器中使用相同的控制器和方法。