Laravel без учета ресурсоемких функций - PullRequest
1 голос
/ 12 февраля 2020

В настоящее время у меня есть 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().

Он хочет что-то подобное. (Этот пример не работает, потому что resources() не имеет метода except().

Route::resources([
    'campaigns' => 'CampaignController',
    'users' => 'UserController',
    'models' => 'ModelController',
    'trims' => 'TrimController'
])->except(['show']);

Ответы [ 2 ]

4 голосов
/ 12 февраля 2020

Вы можете написать свой собственный класс, который расширяет Illuminate\Routing\Route, и реализовать свой метод resources следующим образом:

namespace App\Extends;

class Route extends Illuminate\Routing\Route {

   public function resources($routes, array $excepts) {
     foreach ($routes as $key => $value){
         $this->resource($key, $value)->except($excepts);
     }
   }

}

После того, как вам нужно будет связать свой класс с вашим поставщиком услуг следующим образом:

public function register()
{
    $this->app->bind('Illuminate\Routing\Route', 'App\\Extends\\Route');
}

и звоните resources в сети. php вот так:

Route::resources([
    'campaigns' => 'CampaignController',
    'users' => 'UserController',
    'models' => 'ModelController',
    'trims' => 'TrimController'
], ['show']);

[EDIT 1]

С laravel .com / docs / 5.8 / controllers # resource-controllers

Вы можете зарегистрировать несколько контроллеров ресурсов одновременно, передав массив для метода ресурсов:

Route::resources([
    'photos' => 'PhotoController',
    'posts' => 'PostController'
]);

Но я не знаю, можно ли так назвать ->except(['show'])

Route::resources([])->except(['show'])
1 голос
/ 13 февраля 2020

Если вы говорите о возможности, то да, это возможно, как указано выше, но по умолчанию вы не можете

Взгляните на этот файл,

/ vendor / laravel / рамки / src / освещение / опоры / фасады / трасса. php

 * @method static \Illuminate\Routing\PendingResourceRegistration resource(string $name, string $controller, array $options = [])
 * @method static void resources(array $resources)
...