В настоящее время у меня есть 4 ресурса в моем файле web.php
.
Route::resource('campaigns', 'CampaignController')->except(['show']);
Route::resource('users', 'UserController')->except(['show']);
Route::resource('models', 'ModelController')->except(['show']);
Route::resource('trims', 'TrimController')->except(['show']);
И я не могу не удивляться. Разве я не могу добавить что-то в функцию Route::resources
чтобы она так себя вела? Это потому, что все они имеют одну общую черту. Они except()
show()
метода show()
.
Хочется что-то подобное. (Этот пример не работает, потому что у resources()
нет метода except()
.
Route::resources([
'campaigns' => 'CampaignController',
'users' => 'UserController',
'models' => 'ModelController',
'trims' => 'TrimController'
])->except(['show']);
Всего 2 ответа
Вы можете написать свой собственный класс, который расширяет IlluminateRoutingRoute
и реализовать свой метод resources
следующим образом:
namespace AppExtends;
class Route extends IlluminateRoutingRoute {
public function resources($routes, array $excepts) {
foreach ($routes as $key => $value){
$this->resource($key, $value)->except($excepts);
}
}
}
После того, как вам нужно будет связать свой класс с вашим поставщиком услуг, как это:
public function register()
{
$this->app->bind('IlluminateRoutingRoute', 'App\Extends\Route');
}
и вызвать resources
в web.php так:
Route::resources([
'campaigns' => 'CampaignController',
'users' => 'UserController',
'models' => 'ModelController',
'trims' => 'TrimController'
], ['show']);
[РЕДАКТИРОВАТЬ 1]
От laravel.com/docs/5.8/controllers#resource-controllers
Вы можете зарегистрировать много контроллеров ресурсов одновременно, передав массив в метод resources:
Route::resources([
'photos' => 'PhotoController',
'posts' => 'PostController'
]);
Но я не знаю, можете ли вы позвонить ->except(['show'])
как это
Route::resources([])->except(['show'])
Если вы говорите о возможности, то да, это возможно, как указано выше, но по умолчанию вы не можете
Посмотрите на этот файл,
/vendor/laravel/framework/src/Illuminate/Support/Facades/Route.php
* @method static IlluminateRoutingPendingResourceRegistration resource(string $name, string $controller, array $options = [])
* @method static void resources(array $resources)