From f930bdf3f40f82ccb0833ad26c8e39b7969c1548 Mon Sep 17 00:00:00 2001 From: Cristian Tabacitu Date: Mon, 15 Jul 2019 16:09:22 +0300 Subject: [PATCH 01/12] fixes #1877 - routes are now defined in the crud controller --- src/CrudRouter.php | 59 +------------------ src/CrudServiceProvider.php | 23 +++++++- src/app/Http/Controllers/CrudController.php | 21 +++++++ .../Controllers/Operations/CloneOperation.php | 22 +++++++ .../Operations/CreateOperation.php | 21 +++++++ .../Operations/DeleteOperation.php | 22 +++++++ .../Controllers/Operations/ListOperation.php | 27 +++++++++ .../Operations/ReorderOperation.php | 22 +++++++ .../Operations/RevisionsOperation.php | 22 +++++++ .../Controllers/Operations/ShowOperation.php | 17 ++++++ .../Operations/UpdateOperation.php | 26 ++++++++ 11 files changed, 222 insertions(+), 60 deletions(-) diff --git a/src/CrudRouter.php b/src/CrudRouter.php index 1573422636..435cb0a268 100644 --- a/src/CrudRouter.php +++ b/src/CrudRouter.php @@ -2,7 +2,7 @@ namespace Backpack\CRUD; -use Route; +use Illuminate\Support\Facades\Route; class CrudRouter { @@ -17,57 +17,6 @@ public function __construct($name, $controller, $options) $this->name = $name; $this->controller = $controller; $this->options = $options; - - // CRUD routes for core features - Route::post($this->name.'/search', [ - 'as' => 'crud.'.$this->name.'.search', - 'uses' => $this->controller.'@search', - ]); - - Route::delete($this->name.'/bulk-delete', [ - 'as' => 'crud.'.$this->name.'.bulkDelete', - 'uses' => $this->controller.'@bulkDelete', - ]); - - Route::get($this->name.'/reorder', [ - 'as' => 'crud.'.$this->name.'.reorder', - 'uses' => $this->controller.'@reorder', - ]); - - Route::post($this->name.'/reorder', [ - 'as' => 'crud.'.$this->name.'.save.reorder', - 'uses' => $this->controller.'@saveReorder', - ]); - - Route::get($this->name.'/{id}/details', [ - 'as' => 'crud.'.$this->name.'.showDetailsRow', - 'uses' => $this->controller.'@showDetailsRow', - ]); - - Route::get($this->name.'/{id}/translate/{lang}', [ - 'as' => 'crud.'.$this->name.'.translateItem', - 'uses' => $this->controller.'@translateItem', - ]); - - Route::get($this->name.'/{id}/revisions', [ - 'as' => 'crud.'.$this->name.'.listRevisions', - 'uses' => $this->controller.'@listRevisions', - ]); - - Route::post($this->name.'/{id}/revisions/{revisionId}/restore', [ - 'as' => 'crud.'.$this->name.'.restoreRevision', - 'uses' => $this->controller.'@restoreRevision', - ]); - - Route::post($this->name.'/{id}/clone', [ - 'as' => 'crud.'.$this->name.'.clone', - 'uses' => $this->controller.'@clone', - ]); - - Route::post($this->name.'/bulk-clone', [ - 'as' => 'crud.'.$this->name.'.bulkClone', - 'uses' => $this->controller.'@bulkClone', - ]); } /** @@ -78,12 +27,6 @@ public function __destruct() $options_with_default_route_names = array_merge([ 'names' => [ 'index' => 'crud.'.$this->name.'.index', - 'create' => 'crud.'.$this->name.'.create', - 'store' => 'crud.'.$this->name.'.store', - 'edit' => 'crud.'.$this->name.'.edit', - 'update' => 'crud.'.$this->name.'.update', - 'show' => 'crud.'.$this->name.'.show', - 'destroy' => 'crud.'.$this->name.'.destroy', ], ], $this->options); diff --git a/src/CrudServiceProvider.php b/src/CrudServiceProvider.php index 59c7b0e62c..edebb74991 100644 --- a/src/CrudServiceProvider.php +++ b/src/CrudServiceProvider.php @@ -2,6 +2,7 @@ namespace Backpack\CRUD; +use Illuminate\Support\Facades\Route; use Illuminate\Support\ServiceProvider; class CrudServiceProvider extends ServiceProvider @@ -91,6 +92,12 @@ public function register() return new CRUD($app); }); + // load a macro for Route, + // for developers to be able to load all routes for a CRUD resource in one line + if (!Route::hasMacro('crudResource')) { + $this->addRouteMacro(); + } + // register the helper functions $this->loadHelpers(); @@ -103,9 +110,21 @@ public function register() } } - public static function resource($name, $controller, array $options = []) + /** + * The route macro allows developers to generate the routes for a CrudController, + * for all operations, using a simple syntax: Route::crud(). + * + * It will go to the given CrudController and get the routes() method on it. + */ + private function addRouteMacro() { - return new CrudRouter($name, $controller, $options); + Route::macro('crud', function ($router, $name, $controller, array $options = []) { + $groupStack = $router->hasGroupStack() ? $router->getGroupStack()[0]['namespace'].'\\' : 'App\\'; + $namespacedController = $groupStack.$controller; + $controllerInstance = new $namespacedController; + + return $controllerInstance->routes($name, $controller, $options); + }); } /** diff --git a/src/app/Http/Controllers/CrudController.php b/src/app/Http/Controllers/CrudController.php index 3200deb491..120e68f60e 100644 --- a/src/app/Http/Controllers/CrudController.php +++ b/src/app/Http/Controllers/CrudController.php @@ -3,6 +3,7 @@ namespace Backpack\CRUD\app\Http\Controllers; use Backpack\CRUD\CrudPanel; +use Backpack\CRUD\CrudRouter; use Illuminate\Http\Request; use Illuminate\Foundation\Bus\DispatchesJobs; use Illuminate\Routing\Controller as BaseController; @@ -53,4 +54,24 @@ public function __construct() public function setup() { } + + /** + * Load routes for all operations. + * Allow developers to load extra routes by creating a method that starts with setupRoutesFor + * + * @param string $name Name of the current entity (singular). + * @param string $controller Name of the current controller. + * @param array $options Options for the route (optional). + */ + public function routes($name, $controller, $options = []) { + $defaultRoutes = new CrudRouter($name, $controller, $options); + + $setupRouteMethods = preg_grep('/^setupRoutesFor/', get_class_methods($this)); + + if (count($setupRouteMethods)) { + foreach ($setupRouteMethods as $methodName) { + $this->{$methodName}($name, $controller, $options); + } + } + } } diff --git a/src/app/Http/Controllers/Operations/CloneOperation.php b/src/app/Http/Controllers/Operations/CloneOperation.php index 6d40585ea9..f046c3485e 100644 --- a/src/app/Http/Controllers/Operations/CloneOperation.php +++ b/src/app/Http/Controllers/Operations/CloneOperation.php @@ -2,8 +2,30 @@ namespace Backpack\CRUD\app\Http\Controllers\Operations; +use Illuminate\Support\Facades\Route; + trait CloneOperation { + /** + * Define which routes are needed for this operation. + * + * @param string $name Name of the current entity (singular). Used as first URL segment. + * @param string $controller Name of the current CrudController. + * @param [type] $options Route options (optional). + */ + protected function setupRoutesForClone($name, $controller, $options) + { + Route::post($name.'/{id}/clone', [ + 'as' => 'crud.'.$name.'.clone', + 'uses' => $controller.'@clone', + ]); + + Route::post($name.'/bulk-clone', [ + 'as' => 'crud.'.$name.'.bulkClone', + 'uses' => $controller.'@bulkClone', + ]); + } + /** * Create a duplicate of the current entry in the datatabase. * diff --git a/src/app/Http/Controllers/Operations/CreateOperation.php b/src/app/Http/Controllers/Operations/CreateOperation.php index 06a7556e50..3ecccc94ce 100644 --- a/src/app/Http/Controllers/Operations/CreateOperation.php +++ b/src/app/Http/Controllers/Operations/CreateOperation.php @@ -2,10 +2,31 @@ namespace Backpack\CRUD\app\Http\Controllers\Operations; +use Illuminate\Support\Facades\Route; use Illuminate\Http\Request as StoreRequest; trait CreateOperation { + /** + * Define which routes are needed for this operation. + * + * @param string $name Name of the current entity (singular). Used as first URL segment. + * @param string $controller Name of the current CrudController. + * @param [type] $options Route options (optional). + */ + protected function setupRoutesForCreate($name, $controller, $options) + { + Route::get($name.'/create', [ + 'as' => 'crud.'.$name.'.create', + 'uses' => $controller.'@create', + ]); + + Route::put($name.'/create', [ + 'as' => 'crud.'.$name.'.store', + 'uses' => $controller.'@store', + ]); + } + /** * Show the form for creating inserting a new row. * diff --git a/src/app/Http/Controllers/Operations/DeleteOperation.php b/src/app/Http/Controllers/Operations/DeleteOperation.php index 8c1b14d7d8..c7c53ee18d 100644 --- a/src/app/Http/Controllers/Operations/DeleteOperation.php +++ b/src/app/Http/Controllers/Operations/DeleteOperation.php @@ -2,8 +2,30 @@ namespace Backpack\CRUD\app\Http\Controllers\Operations; +use Illuminate\Support\Facades\Route; + trait DeleteOperation { + /** + * Define which routes are needed for this operation. + * + * @param string $name Name of the current entity (singular). Used as first URL segment. + * @param string $controller Name of the current CrudController. + * @param [type] $options Route options (optional). + */ + protected function setupRoutesForDelete($name, $controller, $options) + { + Route::delete($name.'/{id}', [ + 'as' => 'crud.'.$name.'.destroy', + 'uses' => $controller.'@destroy', + ]); + + Route::delete($name.'/bulk-delete', [ + 'as' => 'crud.'.$name.'.bulkDelete', + 'uses' => $controller.'@bulkDelete', + ]); + } + /** * Remove the specified resource from storage. * diff --git a/src/app/Http/Controllers/Operations/ListOperation.php b/src/app/Http/Controllers/Operations/ListOperation.php index 5c6d7db46c..a9335dcdb3 100644 --- a/src/app/Http/Controllers/Operations/ListOperation.php +++ b/src/app/Http/Controllers/Operations/ListOperation.php @@ -2,8 +2,35 @@ namespace Backpack\CRUD\app\Http\Controllers\Operations; +use Illuminate\Support\Facades\Route; + trait ListOperation { + /** + * Define which routes are needed for this operation. + * + * @param string $name Name of the current entity (singular). Used as first URL segment. + * @param string $controller Name of the current CrudController. + * @param [type] $options Route options (optional). + */ + protected function setupRoutesForList($name, $controller, $options) + { + Route::get($name.'/', [ + 'as' => 'crud.'.$name.'.index', + 'uses' => $controller.'@index', + ]); + + Route::post($name.'/search', [ + 'as' => 'crud.'.$name.'.search', + 'uses' => $controller.'@search', + ]); + + Route::get($name.'/{id}/details', [ + 'as' => 'crud.'.$name.'.showDetailsRow', + 'uses' => $controller.'@showDetailsRow', + ]); + } + /** * Display all rows in the database for this entity. * diff --git a/src/app/Http/Controllers/Operations/ReorderOperation.php b/src/app/Http/Controllers/Operations/ReorderOperation.php index c774135c64..6079f75cc3 100644 --- a/src/app/Http/Controllers/Operations/ReorderOperation.php +++ b/src/app/Http/Controllers/Operations/ReorderOperation.php @@ -2,8 +2,30 @@ namespace Backpack\CRUD\app\Http\Controllers\Operations; +use Illuminate\Support\Facades\Route; + trait ReorderOperation { + /** + * Define which routes are needed for this operation. + * + * @param string $name Name of the current entity (singular). Used as first URL segment. + * @param string $controller Name of the current CrudController. + * @param [type] $options Route options (optional). + */ + protected function setupRoutesForReorder($name, $controller, $options) + { + Route::get($name.'/reorder', [ + 'as' => 'crud.'.$name.'.reorder', + 'uses' => $controller.'@reorder', + ]); + + Route::post($name.'/reorder', [ + 'as' => 'crud.'.$name.'.save.reorder', + 'uses' => $controller.'@saveReorder', + ]); + } + /** * Reorder the items in the database using the Nested Set pattern. * diff --git a/src/app/Http/Controllers/Operations/RevisionsOperation.php b/src/app/Http/Controllers/Operations/RevisionsOperation.php index 7571e88c0d..341aef1a3c 100644 --- a/src/app/Http/Controllers/Operations/RevisionsOperation.php +++ b/src/app/Http/Controllers/Operations/RevisionsOperation.php @@ -2,8 +2,30 @@ namespace Backpack\CRUD\app\Http\Controllers\Operations; +use Illuminate\Support\Facades\Route; + trait RevisionsOperation { + /** + * Define which routes are needed for this operation. + * + * @param string $name Name of the current entity (singular). Used as first URL segment. + * @param string $controller Name of the current CrudController. + * @param [type] $options Route options (optional). + */ + protected function setupRoutesForRevisions($name, $controller, $options) + { + Route::get($name.'/{id}/revisions', [ + 'as' => 'crud.'.$name.'.listRevisions', + 'uses' => $controller.'@listRevisions', + ]); + + Route::post($name.'/{id}/revisions/{revisionId}/restore', [ + 'as' => 'crud.'.$name.'.restoreRevision', + 'uses' => $controller.'@restoreRevision', + ]); + } + /** * Display the revisions for specified resource. * diff --git a/src/app/Http/Controllers/Operations/ShowOperation.php b/src/app/Http/Controllers/Operations/ShowOperation.php index 00afafcad2..916759b7f1 100644 --- a/src/app/Http/Controllers/Operations/ShowOperation.php +++ b/src/app/Http/Controllers/Operations/ShowOperation.php @@ -2,8 +2,25 @@ namespace Backpack\CRUD\app\Http\Controllers\Operations; +use Illuminate\Support\Facades\Route; + trait ShowOperation { + /** + * Define which routes are needed for this operation. + * + * @param string $name Name of the current entity (singular). Used as first URL segment. + * @param string $controller Name of the current CrudController. + * @param [type] $options Route options (optional). + */ + protected function setupRoutesForShow($name, $controller, $options) + { + Route::get($name.'/{id}', [ + 'as' => 'crud.'.$name.'.show', + 'uses' => $controller.'@show', + ]); + } + /** * Display the specified resource. * diff --git a/src/app/Http/Controllers/Operations/UpdateOperation.php b/src/app/Http/Controllers/Operations/UpdateOperation.php index fc42487b5b..ca1a647795 100644 --- a/src/app/Http/Controllers/Operations/UpdateOperation.php +++ b/src/app/Http/Controllers/Operations/UpdateOperation.php @@ -3,9 +3,35 @@ namespace Backpack\CRUD\app\Http\Controllers\Operations; use Illuminate\Http\Request as UpdateRequest; +use Illuminate\Support\Facades\Route; trait UpdateOperation { + /** + * Define which routes are needed for this operation. + * + * @param string $name Name of the current entity (singular). Used as first URL segment. + * @param string $controller Name of the current CrudController. + * @param [type] $options Route options (optional). + */ + protected function setupRoutesForUpdate($name, $controller, $options) + { + Route::get($name.'/{id}/edit', [ + 'as' => 'crud.'.$name.'.edit', + 'uses' => $controller.'@edit', + ]); + + Route::post($name.'/{id}/edit', [ + 'as' => 'crud.'.$name.'.update', + 'uses' => $controller.'@update', + ]); + + Route::get($name.'/{id}/translate/{lang}', [ + 'as' => 'crud.'.$name.'.translateItem', + 'uses' => $controller.'@translateItem', + ]); + } + /** * Show the form for editing the specified resource. * From 736b610f3347e071155451c1abd7dd3558e09cf1 Mon Sep 17 00:00:00 2001 From: Cristian Tabacitu Date: Mon, 15 Jul 2019 16:09:52 +0300 Subject: [PATCH 02/12] Apply fixes from StyleCI (#1936) [ci skip] [skip ci] --- src/CrudServiceProvider.php | 4 ++-- src/app/Http/Controllers/CrudController.php | 9 +++++---- src/app/Http/Controllers/Operations/CloneOperation.php | 4 ++-- src/app/Http/Controllers/Operations/CreateOperation.php | 4 ++-- src/app/Http/Controllers/Operations/DeleteOperation.php | 4 ++-- src/app/Http/Controllers/Operations/ListOperation.php | 4 ++-- src/app/Http/Controllers/Operations/ReorderOperation.php | 4 ++-- .../Http/Controllers/Operations/RevisionsOperation.php | 4 ++-- src/app/Http/Controllers/Operations/ShowOperation.php | 4 ++-- src/app/Http/Controllers/Operations/UpdateOperation.php | 6 +++--- 10 files changed, 24 insertions(+), 23 deletions(-) diff --git a/src/CrudServiceProvider.php b/src/CrudServiceProvider.php index edebb74991..134c8cb5f8 100644 --- a/src/CrudServiceProvider.php +++ b/src/CrudServiceProvider.php @@ -94,7 +94,7 @@ public function register() // load a macro for Route, // for developers to be able to load all routes for a CRUD resource in one line - if (!Route::hasMacro('crudResource')) { + if (! Route::hasMacro('crudResource')) { $this->addRouteMacro(); } @@ -111,7 +111,7 @@ public function register() } /** - * The route macro allows developers to generate the routes for a CrudController, + * The route macro allows developers to generate the routes for a CrudController, * for all operations, using a simple syntax: Route::crud(). * * It will go to the given CrudController and get the routes() method on it. diff --git a/src/app/Http/Controllers/CrudController.php b/src/app/Http/Controllers/CrudController.php index 120e68f60e..24cae8bcaf 100644 --- a/src/app/Http/Controllers/CrudController.php +++ b/src/app/Http/Controllers/CrudController.php @@ -3,8 +3,8 @@ namespace Backpack\CRUD\app\Http\Controllers; use Backpack\CRUD\CrudPanel; -use Backpack\CRUD\CrudRouter; use Illuminate\Http\Request; +use Backpack\CRUD\CrudRouter; use Illuminate\Foundation\Bus\DispatchesJobs; use Illuminate\Routing\Controller as BaseController; use Illuminate\Foundation\Validation\ValidatesRequests; @@ -57,13 +57,14 @@ public function setup() /** * Load routes for all operations. - * Allow developers to load extra routes by creating a method that starts with setupRoutesFor - * + * Allow developers to load extra routes by creating a method that starts with setupRoutesFor. + * * @param string $name Name of the current entity (singular). * @param string $controller Name of the current controller. * @param array $options Options for the route (optional). */ - public function routes($name, $controller, $options = []) { + public function routes($name, $controller, $options = []) + { $defaultRoutes = new CrudRouter($name, $controller, $options); $setupRouteMethods = preg_grep('/^setupRoutesFor/', get_class_methods($this)); diff --git a/src/app/Http/Controllers/Operations/CloneOperation.php b/src/app/Http/Controllers/Operations/CloneOperation.php index f046c3485e..2c0481cd27 100644 --- a/src/app/Http/Controllers/Operations/CloneOperation.php +++ b/src/app/Http/Controllers/Operations/CloneOperation.php @@ -8,12 +8,12 @@ trait CloneOperation { /** * Define which routes are needed for this operation. - * + * * @param string $name Name of the current entity (singular). Used as first URL segment. * @param string $controller Name of the current CrudController. * @param [type] $options Route options (optional). */ - protected function setupRoutesForClone($name, $controller, $options) + protected function setupRoutesForClone($name, $controller, $options) { Route::post($name.'/{id}/clone', [ 'as' => 'crud.'.$name.'.clone', diff --git a/src/app/Http/Controllers/Operations/CreateOperation.php b/src/app/Http/Controllers/Operations/CreateOperation.php index 3ecccc94ce..f2da139eaa 100644 --- a/src/app/Http/Controllers/Operations/CreateOperation.php +++ b/src/app/Http/Controllers/Operations/CreateOperation.php @@ -9,12 +9,12 @@ trait CreateOperation { /** * Define which routes are needed for this operation. - * + * * @param string $name Name of the current entity (singular). Used as first URL segment. * @param string $controller Name of the current CrudController. * @param [type] $options Route options (optional). */ - protected function setupRoutesForCreate($name, $controller, $options) + protected function setupRoutesForCreate($name, $controller, $options) { Route::get($name.'/create', [ 'as' => 'crud.'.$name.'.create', diff --git a/src/app/Http/Controllers/Operations/DeleteOperation.php b/src/app/Http/Controllers/Operations/DeleteOperation.php index c7c53ee18d..dd8f24e553 100644 --- a/src/app/Http/Controllers/Operations/DeleteOperation.php +++ b/src/app/Http/Controllers/Operations/DeleteOperation.php @@ -8,12 +8,12 @@ trait DeleteOperation { /** * Define which routes are needed for this operation. - * + * * @param string $name Name of the current entity (singular). Used as first URL segment. * @param string $controller Name of the current CrudController. * @param [type] $options Route options (optional). */ - protected function setupRoutesForDelete($name, $controller, $options) + protected function setupRoutesForDelete($name, $controller, $options) { Route::delete($name.'/{id}', [ 'as' => 'crud.'.$name.'.destroy', diff --git a/src/app/Http/Controllers/Operations/ListOperation.php b/src/app/Http/Controllers/Operations/ListOperation.php index a9335dcdb3..19c578fa7a 100644 --- a/src/app/Http/Controllers/Operations/ListOperation.php +++ b/src/app/Http/Controllers/Operations/ListOperation.php @@ -8,12 +8,12 @@ trait ListOperation { /** * Define which routes are needed for this operation. - * + * * @param string $name Name of the current entity (singular). Used as first URL segment. * @param string $controller Name of the current CrudController. * @param [type] $options Route options (optional). */ - protected function setupRoutesForList($name, $controller, $options) + protected function setupRoutesForList($name, $controller, $options) { Route::get($name.'/', [ 'as' => 'crud.'.$name.'.index', diff --git a/src/app/Http/Controllers/Operations/ReorderOperation.php b/src/app/Http/Controllers/Operations/ReorderOperation.php index 6079f75cc3..94ab8ab9af 100644 --- a/src/app/Http/Controllers/Operations/ReorderOperation.php +++ b/src/app/Http/Controllers/Operations/ReorderOperation.php @@ -8,12 +8,12 @@ trait ReorderOperation { /** * Define which routes are needed for this operation. - * + * * @param string $name Name of the current entity (singular). Used as first URL segment. * @param string $controller Name of the current CrudController. * @param [type] $options Route options (optional). */ - protected function setupRoutesForReorder($name, $controller, $options) + protected function setupRoutesForReorder($name, $controller, $options) { Route::get($name.'/reorder', [ 'as' => 'crud.'.$name.'.reorder', diff --git a/src/app/Http/Controllers/Operations/RevisionsOperation.php b/src/app/Http/Controllers/Operations/RevisionsOperation.php index 341aef1a3c..f42578810d 100644 --- a/src/app/Http/Controllers/Operations/RevisionsOperation.php +++ b/src/app/Http/Controllers/Operations/RevisionsOperation.php @@ -8,12 +8,12 @@ trait RevisionsOperation { /** * Define which routes are needed for this operation. - * + * * @param string $name Name of the current entity (singular). Used as first URL segment. * @param string $controller Name of the current CrudController. * @param [type] $options Route options (optional). */ - protected function setupRoutesForRevisions($name, $controller, $options) + protected function setupRoutesForRevisions($name, $controller, $options) { Route::get($name.'/{id}/revisions', [ 'as' => 'crud.'.$name.'.listRevisions', diff --git a/src/app/Http/Controllers/Operations/ShowOperation.php b/src/app/Http/Controllers/Operations/ShowOperation.php index 916759b7f1..dd2022fb86 100644 --- a/src/app/Http/Controllers/Operations/ShowOperation.php +++ b/src/app/Http/Controllers/Operations/ShowOperation.php @@ -8,12 +8,12 @@ trait ShowOperation { /** * Define which routes are needed for this operation. - * + * * @param string $name Name of the current entity (singular). Used as first URL segment. * @param string $controller Name of the current CrudController. * @param [type] $options Route options (optional). */ - protected function setupRoutesForShow($name, $controller, $options) + protected function setupRoutesForShow($name, $controller, $options) { Route::get($name.'/{id}', [ 'as' => 'crud.'.$name.'.show', diff --git a/src/app/Http/Controllers/Operations/UpdateOperation.php b/src/app/Http/Controllers/Operations/UpdateOperation.php index ca1a647795..cb19f8e27f 100644 --- a/src/app/Http/Controllers/Operations/UpdateOperation.php +++ b/src/app/Http/Controllers/Operations/UpdateOperation.php @@ -2,19 +2,19 @@ namespace Backpack\CRUD\app\Http\Controllers\Operations; -use Illuminate\Http\Request as UpdateRequest; use Illuminate\Support\Facades\Route; +use Illuminate\Http\Request as UpdateRequest; trait UpdateOperation { /** * Define which routes are needed for this operation. - * + * * @param string $name Name of the current entity (singular). Used as first URL segment. * @param string $controller Name of the current CrudController. * @param [type] $options Route options (optional). */ - protected function setupRoutesForUpdate($name, $controller, $options) + protected function setupRoutesForUpdate($name, $controller, $options) { Route::get($name.'/{id}/edit', [ 'as' => 'crud.'.$name.'.edit', From e4a4a0aa1fa2e7ed1fafb08a929bf0d43d30e08b Mon Sep 17 00:00:00 2001 From: Cristian Tabacitu Date: Mon, 15 Jul 2019 16:16:15 +0300 Subject: [PATCH 03/12] elimninate CRUD alias --- composer.json | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/composer.json b/composer.json index 8c5245c936..6a3f5ff71e 100644 --- a/composer.json +++ b/composer.json @@ -61,10 +61,7 @@ "laravel": { "providers": [ "Backpack\\CRUD\\CrudServiceProvider" - ], - "aliases": { - "CRUD": "Backpack\\CRUD\\CrudServiceProvider" - } + ] } } } From 24b88e8a8f68b4b5115203091a11aa7da7727d97 Mon Sep 17 00:00:00 2001 From: Cristian Tabacitu Date: Mon, 15 Jul 2019 16:24:18 +0300 Subject: [PATCH 04/12] removed deprecated CrudRouter class --- src/CrudRouter.php | 87 --------------------- src/app/Http/Controllers/CrudController.php | 3 - 2 files changed, 90 deletions(-) delete mode 100644 src/CrudRouter.php diff --git a/src/CrudRouter.php b/src/CrudRouter.php deleted file mode 100644 index 435cb0a268..0000000000 --- a/src/CrudRouter.php +++ /dev/null @@ -1,87 +0,0 @@ -name = $name; - $this->controller = $controller; - $this->options = $options; - } - - /** - * The CRUD resource needs to be registered after all the other routes. - */ - public function __destruct() - { - $options_with_default_route_names = array_merge([ - 'names' => [ - 'index' => 'crud.'.$this->name.'.index', - ], - ], $this->options); - - Route::resource($this->name, $this->controller, $options_with_default_route_names); - } - - /** - * Call other methods in this class, that register extra routes. - * - * @param [type] $injectables [description] - * @return [type] [description] - */ - public function with($injectables) - { - if (is_string($injectables)) { - $this->extraRoutes[] = 'with'.ucwords($injectables); - } elseif (is_array($injectables)) { - foreach ($injectables as $injectable) { - $this->extraRoutes[] = 'with'.ucwords($injectable); - } - } else { - $reflection = new \ReflectionFunction($injectables); - - if ($reflection->isClosure()) { - $this->extraRoutes[] = $injectables; - } - } - - return $this->registerExtraRoutes(); - } - - /** - * TODO - * Give developers the ability to unregister a route. - */ - // public function without($injectables) {} - - /** - * Register the routes that were passed using the "with" syntax. - */ - private function registerExtraRoutes() - { - foreach ($this->extraRoutes as $route) { - if (is_string($route)) { - $this->{$route}(); - } else { - $route(); - } - } - } - - public function __call($method, $parameters = null) - { - if (method_exists($this, $method)) { - $this->{$method}($parameters); - } - } -} diff --git a/src/app/Http/Controllers/CrudController.php b/src/app/Http/Controllers/CrudController.php index 24cae8bcaf..dc1f01b328 100644 --- a/src/app/Http/Controllers/CrudController.php +++ b/src/app/Http/Controllers/CrudController.php @@ -4,7 +4,6 @@ use Backpack\CRUD\CrudPanel; use Illuminate\Http\Request; -use Backpack\CRUD\CrudRouter; use Illuminate\Foundation\Bus\DispatchesJobs; use Illuminate\Routing\Controller as BaseController; use Illuminate\Foundation\Validation\ValidatesRequests; @@ -65,8 +64,6 @@ public function setup() */ public function routes($name, $controller, $options = []) { - $defaultRoutes = new CrudRouter($name, $controller, $options); - $setupRouteMethods = preg_grep('/^setupRoutesFor/', get_class_methods($this)); if (count($setupRouteMethods)) { From 1ea8d529f4a6a508b03fbdaea6306e449c05e8ed Mon Sep 17 00:00:00 2001 From: Cristian Tabacitu Date: Tue, 23 Jul 2019 07:28:10 +0300 Subject: [PATCH 05/12] default CrudController uses ZERO operations by default --- src/app/Http/Controllers/CrudController.php | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/src/app/Http/Controllers/CrudController.php b/src/app/Http/Controllers/CrudController.php index dc1f01b328..8222586a42 100644 --- a/src/app/Http/Controllers/CrudController.php +++ b/src/app/Http/Controllers/CrudController.php @@ -7,20 +7,10 @@ use Illuminate\Foundation\Bus\DispatchesJobs; use Illuminate\Routing\Controller as BaseController; use Illuminate\Foundation\Validation\ValidatesRequests; -use Backpack\CRUD\app\Http\Controllers\Operations\SaveActions; -use Backpack\CRUD\app\Http\Controllers\Operations\ListOperation; -use Backpack\CRUD\app\Http\Controllers\Operations\ShowOperation; -use Backpack\CRUD\app\Http\Controllers\Operations\CloneOperation; -use Backpack\CRUD\app\Http\Controllers\Operations\CreateOperation; -use Backpack\CRUD\app\Http\Controllers\Operations\DeleteOperation; -use Backpack\CRUD\app\Http\Controllers\Operations\UpdateOperation; -use Backpack\CRUD\app\Http\Controllers\Operations\ReorderOperation; -use Backpack\CRUD\app\Http\Controllers\Operations\RevisionsOperation; class CrudController extends BaseController { use DispatchesJobs, ValidatesRequests; - use CreateOperation, CloneOperation, DeleteOperation, ListOperation, ReorderOperation, RevisionsOperation, SaveActions, ShowOperation, UpdateOperation; public $data = []; public $request; From 634f493f9f49424a3bd04ae5fb584b65ff9bab34 Mon Sep 17 00:00:00 2001 From: Cristian Tabacitu Date: Tue, 23 Jul 2019 07:53:05 +0300 Subject: [PATCH 06/12] operation routes are now set up for all setupOperationNameRoutes methods in the CrudController --- src/app/Http/Controllers/CrudController.php | 9 +++++---- src/app/Http/Controllers/Operations/CloneOperation.php | 2 +- src/app/Http/Controllers/Operations/CreateOperation.php | 2 +- src/app/Http/Controllers/Operations/DeleteOperation.php | 2 +- src/app/Http/Controllers/Operations/ListOperation.php | 2 +- src/app/Http/Controllers/Operations/ReorderOperation.php | 2 +- .../Http/Controllers/Operations/RevisionsOperation.php | 2 +- src/app/Http/Controllers/Operations/ShowOperation.php | 2 +- src/app/Http/Controllers/Operations/UpdateOperation.php | 2 +- 9 files changed, 13 insertions(+), 12 deletions(-) diff --git a/src/app/Http/Controllers/CrudController.php b/src/app/Http/Controllers/CrudController.php index 8222586a42..2660789125 100644 --- a/src/app/Http/Controllers/CrudController.php +++ b/src/app/Http/Controllers/CrudController.php @@ -7,6 +7,7 @@ use Illuminate\Foundation\Bus\DispatchesJobs; use Illuminate\Routing\Controller as BaseController; use Illuminate\Foundation\Validation\ValidatesRequests; +use Illuminate\Support\Str; class CrudController extends BaseController { @@ -54,11 +55,11 @@ public function setup() */ public function routes($name, $controller, $options = []) { - $setupRouteMethods = preg_grep('/^setupRoutesFor/', get_class_methods($this)); + preg_match_all('/(?<=^|;)setup([^;]+?)Routes(;|$)/', implode(';', get_class_methods($this)), $matches); - if (count($setupRouteMethods)) { - foreach ($setupRouteMethods as $methodName) { - $this->{$methodName}($name, $controller, $options); + if (count($matches[1])) { + foreach ($matches[1] as $methodName) { + $this->{'setup'.$methodName.'Routes'}($name, $controller, $options); } } } diff --git a/src/app/Http/Controllers/Operations/CloneOperation.php b/src/app/Http/Controllers/Operations/CloneOperation.php index 2c0481cd27..80554c78c4 100644 --- a/src/app/Http/Controllers/Operations/CloneOperation.php +++ b/src/app/Http/Controllers/Operations/CloneOperation.php @@ -13,7 +13,7 @@ trait CloneOperation * @param string $controller Name of the current CrudController. * @param [type] $options Route options (optional). */ - protected function setupRoutesForClone($name, $controller, $options) + protected function setupCloneRoutes($name, $controller, $options) { Route::post($name.'/{id}/clone', [ 'as' => 'crud.'.$name.'.clone', diff --git a/src/app/Http/Controllers/Operations/CreateOperation.php b/src/app/Http/Controllers/Operations/CreateOperation.php index f2da139eaa..732672736b 100644 --- a/src/app/Http/Controllers/Operations/CreateOperation.php +++ b/src/app/Http/Controllers/Operations/CreateOperation.php @@ -14,7 +14,7 @@ trait CreateOperation * @param string $controller Name of the current CrudController. * @param [type] $options Route options (optional). */ - protected function setupRoutesForCreate($name, $controller, $options) + protected function setupCreateRoutes($name, $controller, $options) { Route::get($name.'/create', [ 'as' => 'crud.'.$name.'.create', diff --git a/src/app/Http/Controllers/Operations/DeleteOperation.php b/src/app/Http/Controllers/Operations/DeleteOperation.php index dd8f24e553..89647fc03e 100644 --- a/src/app/Http/Controllers/Operations/DeleteOperation.php +++ b/src/app/Http/Controllers/Operations/DeleteOperation.php @@ -13,7 +13,7 @@ trait DeleteOperation * @param string $controller Name of the current CrudController. * @param [type] $options Route options (optional). */ - protected function setupRoutesForDelete($name, $controller, $options) + protected function setupDeleteRoutes($name, $controller, $options) { Route::delete($name.'/{id}', [ 'as' => 'crud.'.$name.'.destroy', diff --git a/src/app/Http/Controllers/Operations/ListOperation.php b/src/app/Http/Controllers/Operations/ListOperation.php index 19c578fa7a..bc35a0a45f 100644 --- a/src/app/Http/Controllers/Operations/ListOperation.php +++ b/src/app/Http/Controllers/Operations/ListOperation.php @@ -13,7 +13,7 @@ trait ListOperation * @param string $controller Name of the current CrudController. * @param [type] $options Route options (optional). */ - protected function setupRoutesForList($name, $controller, $options) + protected function setupListRoutes($name, $controller, $options) { Route::get($name.'/', [ 'as' => 'crud.'.$name.'.index', diff --git a/src/app/Http/Controllers/Operations/ReorderOperation.php b/src/app/Http/Controllers/Operations/ReorderOperation.php index 94ab8ab9af..fb925dddcf 100644 --- a/src/app/Http/Controllers/Operations/ReorderOperation.php +++ b/src/app/Http/Controllers/Operations/ReorderOperation.php @@ -13,7 +13,7 @@ trait ReorderOperation * @param string $controller Name of the current CrudController. * @param [type] $options Route options (optional). */ - protected function setupRoutesForReorder($name, $controller, $options) + protected function setupReorderRoutes($name, $controller, $options) { Route::get($name.'/reorder', [ 'as' => 'crud.'.$name.'.reorder', diff --git a/src/app/Http/Controllers/Operations/RevisionsOperation.php b/src/app/Http/Controllers/Operations/RevisionsOperation.php index f42578810d..c145de728f 100644 --- a/src/app/Http/Controllers/Operations/RevisionsOperation.php +++ b/src/app/Http/Controllers/Operations/RevisionsOperation.php @@ -13,7 +13,7 @@ trait RevisionsOperation * @param string $controller Name of the current CrudController. * @param [type] $options Route options (optional). */ - protected function setupRoutesForRevisions($name, $controller, $options) + protected function setupRevisionsRoutes($name, $controller, $options) { Route::get($name.'/{id}/revisions', [ 'as' => 'crud.'.$name.'.listRevisions', diff --git a/src/app/Http/Controllers/Operations/ShowOperation.php b/src/app/Http/Controllers/Operations/ShowOperation.php index dd2022fb86..a5f53c8ffa 100644 --- a/src/app/Http/Controllers/Operations/ShowOperation.php +++ b/src/app/Http/Controllers/Operations/ShowOperation.php @@ -13,7 +13,7 @@ trait ShowOperation * @param string $controller Name of the current CrudController. * @param [type] $options Route options (optional). */ - protected function setupRoutesForShow($name, $controller, $options) + protected function setupShowRoutes($name, $controller, $options) { Route::get($name.'/{id}', [ 'as' => 'crud.'.$name.'.show', diff --git a/src/app/Http/Controllers/Operations/UpdateOperation.php b/src/app/Http/Controllers/Operations/UpdateOperation.php index cb19f8e27f..3507411c98 100644 --- a/src/app/Http/Controllers/Operations/UpdateOperation.php +++ b/src/app/Http/Controllers/Operations/UpdateOperation.php @@ -14,7 +14,7 @@ trait UpdateOperation * @param string $controller Name of the current CrudController. * @param [type] $options Route options (optional). */ - protected function setupRoutesForUpdate($name, $controller, $options) + protected function setupUpdateRoutes($name, $controller, $options) { Route::get($name.'/{id}/edit', [ 'as' => 'crud.'.$name.'.edit', From 27e4bed7ba528097042a52ff3bcc938aa2027409 Mon Sep 17 00:00:00 2001 From: Cristian Tabacitu Date: Tue, 23 Jul 2019 08:32:58 +0300 Subject: [PATCH 07/12] separated BulkClone and BulkDelete into their own operation traits --- .../Operations/BulkCloneOperation.php | 47 +++++++++++++++++++ .../Operations/BulkDeleteOperation.php | 45 ++++++++++++++++++ .../Controllers/Operations/CloneOperation.php | 29 ------------ .../Operations/CreateOperation.php | 2 +- .../Operations/DeleteOperation.php | 27 ----------- .../Operations/UpdateOperation.php | 4 +- .../views/buttons/bulk_delete.blade.php | 2 +- 7 files changed, 96 insertions(+), 60 deletions(-) create mode 100644 src/app/Http/Controllers/Operations/BulkCloneOperation.php create mode 100644 src/app/Http/Controllers/Operations/BulkDeleteOperation.php diff --git a/src/app/Http/Controllers/Operations/BulkCloneOperation.php b/src/app/Http/Controllers/Operations/BulkCloneOperation.php new file mode 100644 index 0000000000..df679aa565 --- /dev/null +++ b/src/app/Http/Controllers/Operations/BulkCloneOperation.php @@ -0,0 +1,47 @@ + 'crud.'.$name.'.bulkClone', + 'uses' => $controller.'@bulkClone', + ]); + } + + /** + * Create duplicates of multiple entries in the datatabase. + * + * @param int $id + * + * @return Response + */ + public function bulkClone() + { + $this->crud->hasAccessOrFail('clone'); + $this->crud->setOperation('clone'); + + $entries = $this->request->input('entries'); + $clonedEntries = []; + + foreach ($entries as $key => $id) { + if ($entry = $this->crud->model->find($id)) { + $clonedEntries[] = $entry->replicate()->push(); + } + } + + return $clonedEntries; + } +} diff --git a/src/app/Http/Controllers/Operations/BulkDeleteOperation.php b/src/app/Http/Controllers/Operations/BulkDeleteOperation.php new file mode 100644 index 0000000000..78b6629c51 --- /dev/null +++ b/src/app/Http/Controllers/Operations/BulkDeleteOperation.php @@ -0,0 +1,45 @@ + 'crud.'.$name.'.bulkDelete', + 'uses' => $controller.'@bulkDelete', + ]); + } + + /** + * Delete multiple entries in one go. + * + * @return string + */ + public function bulkDelete() + { + $this->crud->hasAccessOrFail('delete'); + $this->crud->setOperation('delete'); + + $entries = $this->request->input('entries'); + $deletedEntries = []; + + foreach ($entries as $key => $id) { + if ($entry = $this->crud->model->find($id)) { + $deletedEntries[] = $entry->delete(); + } + } + + return $deletedEntries; + } +} diff --git a/src/app/Http/Controllers/Operations/CloneOperation.php b/src/app/Http/Controllers/Operations/CloneOperation.php index 80554c78c4..183cd34aa9 100644 --- a/src/app/Http/Controllers/Operations/CloneOperation.php +++ b/src/app/Http/Controllers/Operations/CloneOperation.php @@ -19,11 +19,6 @@ protected function setupCloneRoutes($name, $controller, $options) 'as' => 'crud.'.$name.'.clone', 'uses' => $controller.'@clone', ]); - - Route::post($name.'/bulk-clone', [ - 'as' => 'crud.'.$name.'.bulkClone', - 'uses' => $controller.'@bulkClone', - ]); } /** @@ -42,28 +37,4 @@ public function clone($id) return (string) $clonedEntry->push(); } - - /** - * Create duplicates of multiple entries in the datatabase. - * - * @param int $id - * - * @return Response - */ - public function bulkClone() - { - $this->crud->hasAccessOrFail('clone'); - $this->crud->setOperation('clone'); - - $entries = $this->request->input('entries'); - $clonedEntries = []; - - foreach ($entries as $key => $id) { - if ($entry = $this->crud->model->find($id)) { - $clonedEntries[] = $entry->replicate()->push(); - } - } - - return $clonedEntries; - } } diff --git a/src/app/Http/Controllers/Operations/CreateOperation.php b/src/app/Http/Controllers/Operations/CreateOperation.php index 732672736b..d2cb717c14 100644 --- a/src/app/Http/Controllers/Operations/CreateOperation.php +++ b/src/app/Http/Controllers/Operations/CreateOperation.php @@ -54,7 +54,7 @@ public function create() * * @return \Illuminate\Http\RedirectResponse */ - public function storeCrud(StoreRequest $request = null) + public function storeEntry(StoreRequest $request = null) { $this->crud->hasAccessOrFail('create'); $this->crud->setOperation('create'); diff --git a/src/app/Http/Controllers/Operations/DeleteOperation.php b/src/app/Http/Controllers/Operations/DeleteOperation.php index 89647fc03e..a5290cf9f5 100644 --- a/src/app/Http/Controllers/Operations/DeleteOperation.php +++ b/src/app/Http/Controllers/Operations/DeleteOperation.php @@ -19,11 +19,6 @@ protected function setupDeleteRoutes($name, $controller, $options) 'as' => 'crud.'.$name.'.destroy', 'uses' => $controller.'@destroy', ]); - - Route::delete($name.'/bulk-delete', [ - 'as' => 'crud.'.$name.'.bulkDelete', - 'uses' => $controller.'@bulkDelete', - ]); } /** @@ -43,26 +38,4 @@ public function destroy($id) return $this->crud->delete($id); } - - /** - * Delete multiple entries in one go. - * - * @return string - */ - public function bulkDelete() - { - $this->crud->hasAccessOrFail('delete'); - $this->crud->setOperation('delete'); - - $entries = $this->request->input('entries'); - $deletedEntries = []; - - foreach ($entries as $key => $id) { - if ($entry = $this->crud->model->find($id)) { - $deletedEntries[] = $entry->delete(); - } - } - - return $deletedEntries; - } } diff --git a/src/app/Http/Controllers/Operations/UpdateOperation.php b/src/app/Http/Controllers/Operations/UpdateOperation.php index 3507411c98..ba59f39f08 100644 --- a/src/app/Http/Controllers/Operations/UpdateOperation.php +++ b/src/app/Http/Controllers/Operations/UpdateOperation.php @@ -21,7 +21,7 @@ protected function setupUpdateRoutes($name, $controller, $options) 'uses' => $controller.'@edit', ]); - Route::post($name.'/{id}/edit', [ + Route::put($name.'/{id}', [ 'as' => 'crud.'.$name.'.update', 'uses' => $controller.'@update', ]); @@ -67,7 +67,7 @@ public function edit($id) * * @return \Illuminate\Http\RedirectResponse */ - public function updateCrud(UpdateRequest $request = null) + public function updateEntry(UpdateRequest $request = null) { $this->crud->hasAccessOrFail('update'); $this->crud->setOperation('update'); diff --git a/src/resources/views/buttons/bulk_delete.blade.php b/src/resources/views/buttons/bulk_delete.blade.php index bbf5067c3f..0bc1ddeac1 100644 --- a/src/resources/views/buttons/bulk_delete.blade.php +++ b/src/resources/views/buttons/bulk_delete.blade.php @@ -29,7 +29,7 @@ function bulkDeleteEntries(button) { // submit an AJAX delete call $.ajax({ url: delete_route, - type: 'DELETE', + type: 'POST', data: { entries: crud.checkedItems }, success: function(result) { // Show an alert with the result From 96d4963c46b77f5f33fbec344d425f9739ae2f8c Mon Sep 17 00:00:00 2001 From: Cristian Tabacitu Date: Tue, 23 Jul 2019 08:33:29 +0300 Subject: [PATCH 08/12] Apply fixes from StyleCI (#1943) [ci skip] [skip ci] --- src/app/Http/Controllers/CrudController.php | 1 - 1 file changed, 1 deletion(-) diff --git a/src/app/Http/Controllers/CrudController.php b/src/app/Http/Controllers/CrudController.php index 2660789125..2cafa44cc4 100644 --- a/src/app/Http/Controllers/CrudController.php +++ b/src/app/Http/Controllers/CrudController.php @@ -7,7 +7,6 @@ use Illuminate\Foundation\Bus\DispatchesJobs; use Illuminate\Routing\Controller as BaseController; use Illuminate\Foundation\Validation\ValidatesRequests; -use Illuminate\Support\Str; class CrudController extends BaseController { From e44b28e88160ddcc570d31b0a0d25247fb14d0ef Mon Sep 17 00:00:00 2001 From: Cristian Tabacitu Date: Tue, 23 Jul 2019 08:36:30 +0300 Subject: [PATCH 09/12] removed options parameter from crud controller routes --- src/app/Http/Controllers/CrudController.php | 4 ++-- src/app/Http/Controllers/Operations/BulkCloneOperation.php | 3 +-- src/app/Http/Controllers/Operations/BulkDeleteOperation.php | 3 +-- src/app/Http/Controllers/Operations/CloneOperation.php | 3 +-- src/app/Http/Controllers/Operations/CreateOperation.php | 3 +-- src/app/Http/Controllers/Operations/DeleteOperation.php | 3 +-- src/app/Http/Controllers/Operations/ListOperation.php | 3 +-- src/app/Http/Controllers/Operations/ReorderOperation.php | 3 +-- src/app/Http/Controllers/Operations/RevisionsOperation.php | 3 +-- src/app/Http/Controllers/Operations/ShowOperation.php | 3 +-- src/app/Http/Controllers/Operations/UpdateOperation.php | 3 +-- 11 files changed, 12 insertions(+), 22 deletions(-) diff --git a/src/app/Http/Controllers/CrudController.php b/src/app/Http/Controllers/CrudController.php index 2660789125..02ab925c33 100644 --- a/src/app/Http/Controllers/CrudController.php +++ b/src/app/Http/Controllers/CrudController.php @@ -53,13 +53,13 @@ public function setup() * @param string $controller Name of the current controller. * @param array $options Options for the route (optional). */ - public function routes($name, $controller, $options = []) + public function routes($name, $controller) { preg_match_all('/(?<=^|;)setup([^;]+?)Routes(;|$)/', implode(';', get_class_methods($this)), $matches); if (count($matches[1])) { foreach ($matches[1] as $methodName) { - $this->{'setup'.$methodName.'Routes'}($name, $controller, $options); + $this->{'setup'.$methodName.'Routes'}($name, $controller); } } } diff --git a/src/app/Http/Controllers/Operations/BulkCloneOperation.php b/src/app/Http/Controllers/Operations/BulkCloneOperation.php index df679aa565..f18b6424ab 100644 --- a/src/app/Http/Controllers/Operations/BulkCloneOperation.php +++ b/src/app/Http/Controllers/Operations/BulkCloneOperation.php @@ -11,9 +11,8 @@ trait BulkCloneOperation * * @param string $name Name of the current entity (singular). Used as first URL segment. * @param string $controller Name of the current CrudController. - * @param [type] $options Route options (optional). */ - protected function setupBulkCloneRoutes($name, $controller, $options) + protected function setupBulkCloneRoutes($name, $controller) { Route::post($name.'/bulk-clone', [ 'as' => 'crud.'.$name.'.bulkClone', diff --git a/src/app/Http/Controllers/Operations/BulkDeleteOperation.php b/src/app/Http/Controllers/Operations/BulkDeleteOperation.php index 78b6629c51..2f14e64e0f 100644 --- a/src/app/Http/Controllers/Operations/BulkDeleteOperation.php +++ b/src/app/Http/Controllers/Operations/BulkDeleteOperation.php @@ -11,9 +11,8 @@ trait BulkDeleteOperation * * @param string $name Name of the current entity (singular). Used as first URL segment. * @param string $controller Name of the current CrudController. - * @param [type] $options Route options (optional). */ - protected function setupBulkDeleteRoutes($name, $controller, $options) + protected function setupBulkDeleteRoutes($name, $controller) { Route::post($name.'/bulk-delete', [ 'as' => 'crud.'.$name.'.bulkDelete', diff --git a/src/app/Http/Controllers/Operations/CloneOperation.php b/src/app/Http/Controllers/Operations/CloneOperation.php index 183cd34aa9..72df3d38bb 100644 --- a/src/app/Http/Controllers/Operations/CloneOperation.php +++ b/src/app/Http/Controllers/Operations/CloneOperation.php @@ -11,9 +11,8 @@ trait CloneOperation * * @param string $name Name of the current entity (singular). Used as first URL segment. * @param string $controller Name of the current CrudController. - * @param [type] $options Route options (optional). */ - protected function setupCloneRoutes($name, $controller, $options) + protected function setupCloneRoutes($name, $controller) { Route::post($name.'/{id}/clone', [ 'as' => 'crud.'.$name.'.clone', diff --git a/src/app/Http/Controllers/Operations/CreateOperation.php b/src/app/Http/Controllers/Operations/CreateOperation.php index d2cb717c14..86ee6d832f 100644 --- a/src/app/Http/Controllers/Operations/CreateOperation.php +++ b/src/app/Http/Controllers/Operations/CreateOperation.php @@ -12,9 +12,8 @@ trait CreateOperation * * @param string $name Name of the current entity (singular). Used as first URL segment. * @param string $controller Name of the current CrudController. - * @param [type] $options Route options (optional). */ - protected function setupCreateRoutes($name, $controller, $options) + protected function setupCreateRoutes($name, $controller) { Route::get($name.'/create', [ 'as' => 'crud.'.$name.'.create', diff --git a/src/app/Http/Controllers/Operations/DeleteOperation.php b/src/app/Http/Controllers/Operations/DeleteOperation.php index a5290cf9f5..552025290f 100644 --- a/src/app/Http/Controllers/Operations/DeleteOperation.php +++ b/src/app/Http/Controllers/Operations/DeleteOperation.php @@ -11,9 +11,8 @@ trait DeleteOperation * * @param string $name Name of the current entity (singular). Used as first URL segment. * @param string $controller Name of the current CrudController. - * @param [type] $options Route options (optional). */ - protected function setupDeleteRoutes($name, $controller, $options) + protected function setupDeleteRoutes($name, $controller) { Route::delete($name.'/{id}', [ 'as' => 'crud.'.$name.'.destroy', diff --git a/src/app/Http/Controllers/Operations/ListOperation.php b/src/app/Http/Controllers/Operations/ListOperation.php index bc35a0a45f..b23af60d9e 100644 --- a/src/app/Http/Controllers/Operations/ListOperation.php +++ b/src/app/Http/Controllers/Operations/ListOperation.php @@ -11,9 +11,8 @@ trait ListOperation * * @param string $name Name of the current entity (singular). Used as first URL segment. * @param string $controller Name of the current CrudController. - * @param [type] $options Route options (optional). */ - protected function setupListRoutes($name, $controller, $options) + protected function setupListRoutes($name, $controller) { Route::get($name.'/', [ 'as' => 'crud.'.$name.'.index', diff --git a/src/app/Http/Controllers/Operations/ReorderOperation.php b/src/app/Http/Controllers/Operations/ReorderOperation.php index fb925dddcf..884859df2f 100644 --- a/src/app/Http/Controllers/Operations/ReorderOperation.php +++ b/src/app/Http/Controllers/Operations/ReorderOperation.php @@ -11,9 +11,8 @@ trait ReorderOperation * * @param string $name Name of the current entity (singular). Used as first URL segment. * @param string $controller Name of the current CrudController. - * @param [type] $options Route options (optional). */ - protected function setupReorderRoutes($name, $controller, $options) + protected function setupReorderRoutes($name, $controller) { Route::get($name.'/reorder', [ 'as' => 'crud.'.$name.'.reorder', diff --git a/src/app/Http/Controllers/Operations/RevisionsOperation.php b/src/app/Http/Controllers/Operations/RevisionsOperation.php index c145de728f..f2b68d2842 100644 --- a/src/app/Http/Controllers/Operations/RevisionsOperation.php +++ b/src/app/Http/Controllers/Operations/RevisionsOperation.php @@ -11,9 +11,8 @@ trait RevisionsOperation * * @param string $name Name of the current entity (singular). Used as first URL segment. * @param string $controller Name of the current CrudController. - * @param [type] $options Route options (optional). */ - protected function setupRevisionsRoutes($name, $controller, $options) + protected function setupRevisionsRoutes($name, $controller) { Route::get($name.'/{id}/revisions', [ 'as' => 'crud.'.$name.'.listRevisions', diff --git a/src/app/Http/Controllers/Operations/ShowOperation.php b/src/app/Http/Controllers/Operations/ShowOperation.php index a5f53c8ffa..1ae22582cf 100644 --- a/src/app/Http/Controllers/Operations/ShowOperation.php +++ b/src/app/Http/Controllers/Operations/ShowOperation.php @@ -11,9 +11,8 @@ trait ShowOperation * * @param string $name Name of the current entity (singular). Used as first URL segment. * @param string $controller Name of the current CrudController. - * @param [type] $options Route options (optional). */ - protected function setupShowRoutes($name, $controller, $options) + protected function setupShowRoutes($name, $controller) { Route::get($name.'/{id}', [ 'as' => 'crud.'.$name.'.show', diff --git a/src/app/Http/Controllers/Operations/UpdateOperation.php b/src/app/Http/Controllers/Operations/UpdateOperation.php index ba59f39f08..64a21fd04f 100644 --- a/src/app/Http/Controllers/Operations/UpdateOperation.php +++ b/src/app/Http/Controllers/Operations/UpdateOperation.php @@ -12,9 +12,8 @@ trait UpdateOperation * * @param string $name Name of the current entity (singular). Used as first URL segment. * @param string $controller Name of the current CrudController. - * @param [type] $options Route options (optional). */ - protected function setupUpdateRoutes($name, $controller, $options) + protected function setupUpdateRoutes($name, $controller) { Route::get($name.'/{id}/edit', [ 'as' => 'crud.'.$name.'.edit', From 991f5fe78115ee03ac9d2f68b231af98c1dd4a25 Mon Sep 17 00:00:00 2001 From: Cristian Tabacitu Date: Tue, 23 Jul 2019 15:48:50 +0300 Subject: [PATCH 10/12] routes set up in the controller have a default name prefix, but it can be customized --- src/CrudServiceProvider.php | 22 ++++++++++++++++--- src/app/Http/Controllers/CrudController.php | 10 ++++----- .../Operations/BulkCloneOperation.php | 9 ++++---- .../Operations/BulkDeleteOperation.php | 9 ++++---- .../Controllers/Operations/CloneOperation.php | 9 ++++---- .../Operations/CreateOperation.php | 13 ++++++----- .../Operations/DeleteOperation.php | 9 ++++---- .../Controllers/Operations/ListOperation.php | 19 ++++++++-------- .../Operations/ReorderOperation.php | 11 +++++----- .../Operations/RevisionsOperation.php | 13 ++++++----- .../Controllers/Operations/ShowOperation.php | 9 ++++---- .../Operations/UpdateOperation.php | 15 +++++++------ 12 files changed, 87 insertions(+), 61 deletions(-) diff --git a/src/CrudServiceProvider.php b/src/CrudServiceProvider.php index 134c8cb5f8..006065406a 100644 --- a/src/CrudServiceProvider.php +++ b/src/CrudServiceProvider.php @@ -118,12 +118,28 @@ public function register() */ private function addRouteMacro() { - Route::macro('crud', function ($router, $name, $controller, array $options = []) { - $groupStack = $router->hasGroupStack() ? $router->getGroupStack()[0]['namespace'].'\\' : 'App\\'; + Route::macro('crud', function ($name, $controller) { + // check if a specific route name was passed + $routeName = ''; + if ($this->hasGroupStack()) { + foreach ($this->getGroupStack() as $key => $groupStack) { + if (isset($groupStack['name'])) { + if (is_array($groupStack['name'])) { + $routeName = implode('', $groupStack['name']); + } else { + $routeName = $groupStack['name']; + } + } + } + } + $routeName .= $name.'.'; + + // get an instance of the controller + $groupStack = $this->hasGroupStack() ? $this->getGroupStack()[0]['namespace'].'\\' : 'App\\'; $namespacedController = $groupStack.$controller; $controllerInstance = new $namespacedController; - return $controllerInstance->routes($name, $controller, $options); + return $controllerInstance->routes($name, $routeName, $controller); }); } diff --git a/src/app/Http/Controllers/CrudController.php b/src/app/Http/Controllers/CrudController.php index e77828b60b..e1fd24af0b 100644 --- a/src/app/Http/Controllers/CrudController.php +++ b/src/app/Http/Controllers/CrudController.php @@ -48,17 +48,17 @@ public function setup() * Load routes for all operations. * Allow developers to load extra routes by creating a method that starts with setupRoutesFor. * - * @param string $name Name of the current entity (singular). - * @param string $controller Name of the current controller. - * @param array $options Options for the route (optional). + * @param string $segment Name of the current entity (singular). + * @param string $routeName Route name prefix (ends with .). + * @param string $controller Name of the current controller. */ - public function routes($name, $controller) + public function routes($segment, $routeName, $controller) { preg_match_all('/(?<=^|;)setup([^;]+?)Routes(;|$)/', implode(';', get_class_methods($this)), $matches); if (count($matches[1])) { foreach ($matches[1] as $methodName) { - $this->{'setup'.$methodName.'Routes'}($name, $controller); + $this->{'setup'.$methodName.'Routes'}($segment, $routeName, $controller); } } } diff --git a/src/app/Http/Controllers/Operations/BulkCloneOperation.php b/src/app/Http/Controllers/Operations/BulkCloneOperation.php index f18b6424ab..b942a1ac54 100644 --- a/src/app/Http/Controllers/Operations/BulkCloneOperation.php +++ b/src/app/Http/Controllers/Operations/BulkCloneOperation.php @@ -9,13 +9,14 @@ trait BulkCloneOperation /** * Define which routes are needed for this operation. * - * @param string $name Name of the current entity (singular). Used as first URL segment. + * @param string $segment Name of the current entity (singular). Used as first URL segment. + * @param string $routeName Prefix of the route name. * @param string $controller Name of the current CrudController. */ - protected function setupBulkCloneRoutes($name, $controller) + protected function setupBulkCloneRoutes($segment, $routeName, $controller) { - Route::post($name.'/bulk-clone', [ - 'as' => 'crud.'.$name.'.bulkClone', + Route::post($segment.'/bulk-clone', [ + 'as' => $routeName.'bulkClone', 'uses' => $controller.'@bulkClone', ]); } diff --git a/src/app/Http/Controllers/Operations/BulkDeleteOperation.php b/src/app/Http/Controllers/Operations/BulkDeleteOperation.php index 2f14e64e0f..6f29c2fb21 100644 --- a/src/app/Http/Controllers/Operations/BulkDeleteOperation.php +++ b/src/app/Http/Controllers/Operations/BulkDeleteOperation.php @@ -9,13 +9,14 @@ trait BulkDeleteOperation /** * Define which routes are needed for this operation. * - * @param string $name Name of the current entity (singular). Used as first URL segment. + * @param string $segment Name of the current entity (singular). Used as first URL segment. + * @param string $routeName Prefix of the route name. * @param string $controller Name of the current CrudController. */ - protected function setupBulkDeleteRoutes($name, $controller) + protected function setupBulkDeleteRoutes($segment, $routeName, $controller) { - Route::post($name.'/bulk-delete', [ - 'as' => 'crud.'.$name.'.bulkDelete', + Route::post($segment.'/bulk-delete', [ + 'as' => $routeName.'bulkDelete', 'uses' => $controller.'@bulkDelete', ]); } diff --git a/src/app/Http/Controllers/Operations/CloneOperation.php b/src/app/Http/Controllers/Operations/CloneOperation.php index 72df3d38bb..b7da9dc1b0 100644 --- a/src/app/Http/Controllers/Operations/CloneOperation.php +++ b/src/app/Http/Controllers/Operations/CloneOperation.php @@ -9,13 +9,14 @@ trait CloneOperation /** * Define which routes are needed for this operation. * - * @param string $name Name of the current entity (singular). Used as first URL segment. + * @param string $segment Name of the current entity (singular). Used as first URL segment. + * @param string $routeName Prefix of the route name. * @param string $controller Name of the current CrudController. */ - protected function setupCloneRoutes($name, $controller) + protected function setupCloneRoutes($segment, $routeName, $controller) { - Route::post($name.'/{id}/clone', [ - 'as' => 'crud.'.$name.'.clone', + Route::post($segment.'/{id}/clone', [ + 'as' => $routeName.'clone', 'uses' => $controller.'@clone', ]); } diff --git a/src/app/Http/Controllers/Operations/CreateOperation.php b/src/app/Http/Controllers/Operations/CreateOperation.php index 86ee6d832f..9a8c380c4e 100644 --- a/src/app/Http/Controllers/Operations/CreateOperation.php +++ b/src/app/Http/Controllers/Operations/CreateOperation.php @@ -10,18 +10,19 @@ trait CreateOperation /** * Define which routes are needed for this operation. * - * @param string $name Name of the current entity (singular). Used as first URL segment. + * @param string $segment Name of the current entity (singular). Used as first URL segment. + * @param string $routeName Prefix of the route name. * @param string $controller Name of the current CrudController. */ - protected function setupCreateRoutes($name, $controller) + protected function setupCreateRoutes($segment, $routeName, $controller) { - Route::get($name.'/create', [ - 'as' => 'crud.'.$name.'.create', + Route::get($segment.'/create', [ + 'as' => $routeName.'create', 'uses' => $controller.'@create', ]); - Route::put($name.'/create', [ - 'as' => 'crud.'.$name.'.store', + Route::put($segment.'/create', [ + 'as' => $routeName.'store', 'uses' => $controller.'@store', ]); } diff --git a/src/app/Http/Controllers/Operations/DeleteOperation.php b/src/app/Http/Controllers/Operations/DeleteOperation.php index 552025290f..56da1d4e52 100644 --- a/src/app/Http/Controllers/Operations/DeleteOperation.php +++ b/src/app/Http/Controllers/Operations/DeleteOperation.php @@ -9,13 +9,14 @@ trait DeleteOperation /** * Define which routes are needed for this operation. * - * @param string $name Name of the current entity (singular). Used as first URL segment. + * @param string $segment Name of the current entity (singular). Used as first URL segment. + * @param string $routeName Prefix of the route name. * @param string $controller Name of the current CrudController. */ - protected function setupDeleteRoutes($name, $controller) + protected function setupDeleteRoutes($segment, $routeName, $controller) { - Route::delete($name.'/{id}', [ - 'as' => 'crud.'.$name.'.destroy', + Route::delete($segment.'/{id}', [ + 'as' => $routeName.'destroy', 'uses' => $controller.'@destroy', ]); } diff --git a/src/app/Http/Controllers/Operations/ListOperation.php b/src/app/Http/Controllers/Operations/ListOperation.php index b23af60d9e..3d308c9bac 100644 --- a/src/app/Http/Controllers/Operations/ListOperation.php +++ b/src/app/Http/Controllers/Operations/ListOperation.php @@ -9,23 +9,24 @@ trait ListOperation /** * Define which routes are needed for this operation. * - * @param string $name Name of the current entity (singular). Used as first URL segment. - * @param string $controller Name of the current CrudController. + * @param string $segment Name of the current entity (singular). Used as first URL segment. + * @param string $routeName Prefix of the route name. + * @param string $controller Name of the current CrudController. */ - protected function setupListRoutes($name, $controller) + protected function setupListRoutes($segment, $routeName, $controller) { - Route::get($name.'/', [ - 'as' => 'crud.'.$name.'.index', + Route::get($segment.'/', [ + 'as' => $routeName.'index', 'uses' => $controller.'@index', ]); - Route::post($name.'/search', [ - 'as' => 'crud.'.$name.'.search', + Route::post($segment.'/search', [ + 'as' => $routeName.'search', 'uses' => $controller.'@search', ]); - Route::get($name.'/{id}/details', [ - 'as' => 'crud.'.$name.'.showDetailsRow', + Route::get($segment.'/{id}/details', [ + 'as' => $routeName.'showDetailsRow', 'uses' => $controller.'@showDetailsRow', ]); } diff --git a/src/app/Http/Controllers/Operations/ReorderOperation.php b/src/app/Http/Controllers/Operations/ReorderOperation.php index 884859df2f..03743b523f 100644 --- a/src/app/Http/Controllers/Operations/ReorderOperation.php +++ b/src/app/Http/Controllers/Operations/ReorderOperation.php @@ -10,17 +10,18 @@ trait ReorderOperation * Define which routes are needed for this operation. * * @param string $name Name of the current entity (singular). Used as first URL segment. + * @param string $routeName Prefix of the route name. * @param string $controller Name of the current CrudController. */ - protected function setupReorderRoutes($name, $controller) + protected function setupReorderRoutes($segment, $routeName, $controller) { - Route::get($name.'/reorder', [ - 'as' => 'crud.'.$name.'.reorder', + Route::get($segment.'/reorder', [ + 'as' => $routeName.'reorder', 'uses' => $controller.'@reorder', ]); - Route::post($name.'/reorder', [ - 'as' => 'crud.'.$name.'.save.reorder', + Route::post($segment.'/reorder', [ + 'as' => $routeName.'save.reorder', 'uses' => $controller.'@saveReorder', ]); } diff --git a/src/app/Http/Controllers/Operations/RevisionsOperation.php b/src/app/Http/Controllers/Operations/RevisionsOperation.php index f2b68d2842..959eec9cc2 100644 --- a/src/app/Http/Controllers/Operations/RevisionsOperation.php +++ b/src/app/Http/Controllers/Operations/RevisionsOperation.php @@ -9,18 +9,19 @@ trait RevisionsOperation /** * Define which routes are needed for this operation. * - * @param string $name Name of the current entity (singular). Used as first URL segment. + * @param string $segment Name of the current entity (singular). Used as first URL segment. + * @param string $routeName Prefix of the route name. * @param string $controller Name of the current CrudController. */ - protected function setupRevisionsRoutes($name, $controller) + protected function setupRevisionsRoutes($segment, $routeName, $controller) { - Route::get($name.'/{id}/revisions', [ - 'as' => 'crud.'.$name.'.listRevisions', + Route::get($segment.'/{id}/revisions', [ + 'as' => $routeName.'listRevisions', 'uses' => $controller.'@listRevisions', ]); - Route::post($name.'/{id}/revisions/{revisionId}/restore', [ - 'as' => 'crud.'.$name.'.restoreRevision', + Route::post($segment.'/{id}/revisions/{revisionId}/restore', [ + 'as' => $routeName.'restoreRevision', 'uses' => $controller.'@restoreRevision', ]); } diff --git a/src/app/Http/Controllers/Operations/ShowOperation.php b/src/app/Http/Controllers/Operations/ShowOperation.php index 1ae22582cf..af821f6f38 100644 --- a/src/app/Http/Controllers/Operations/ShowOperation.php +++ b/src/app/Http/Controllers/Operations/ShowOperation.php @@ -9,13 +9,14 @@ trait ShowOperation /** * Define which routes are needed for this operation. * - * @param string $name Name of the current entity (singular). Used as first URL segment. + * @param string $segment Name of the current entity (singular). Used as first URL segment. + * @param string $routeName Prefix of the route name. * @param string $controller Name of the current CrudController. */ - protected function setupShowRoutes($name, $controller) + protected function setupShowRoutes($segment, $routeName, $controller) { - Route::get($name.'/{id}', [ - 'as' => 'crud.'.$name.'.show', + Route::get($segment.'/{id}', [ + 'as' => $routeName.'show', 'uses' => $controller.'@show', ]); } diff --git a/src/app/Http/Controllers/Operations/UpdateOperation.php b/src/app/Http/Controllers/Operations/UpdateOperation.php index 64a21fd04f..df5d6b7471 100644 --- a/src/app/Http/Controllers/Operations/UpdateOperation.php +++ b/src/app/Http/Controllers/Operations/UpdateOperation.php @@ -11,22 +11,23 @@ trait UpdateOperation * Define which routes are needed for this operation. * * @param string $name Name of the current entity (singular). Used as first URL segment. + * @param string $routeName Prefix of the route name. * @param string $controller Name of the current CrudController. */ - protected function setupUpdateRoutes($name, $controller) + protected function setupUpdateRoutes($segment, $routeName, $controller) { - Route::get($name.'/{id}/edit', [ - 'as' => 'crud.'.$name.'.edit', + Route::get($segment.'/{id}/edit', [ + 'as' => $routeName.'edit', 'uses' => $controller.'@edit', ]); - Route::put($name.'/{id}', [ - 'as' => 'crud.'.$name.'.update', + Route::put($segment.'/{id}', [ + 'as' => $routeName.'update', 'uses' => $controller.'@update', ]); - Route::get($name.'/{id}/translate/{lang}', [ - 'as' => 'crud.'.$name.'.translateItem', + Route::get($segment.'/{id}/translate/{lang}', [ + 'as' => $routeName.'translateItem', 'uses' => $controller.'@translateItem', ]); } From d59c63dd692d1d67dc04fcf6370bda099291fb5f Mon Sep 17 00:00:00 2001 From: Cristian Tabacitu Date: Tue, 23 Jul 2019 16:31:55 +0300 Subject: [PATCH 11/12] polished comments for routes-in-controller feature --- src/CrudServiceProvider.php | 9 ++++++--- .../Http/Controllers/Operations/BulkCloneOperation.php | 2 +- .../Http/Controllers/Operations/BulkDeleteOperation.php | 2 +- src/app/Http/Controllers/Operations/CloneOperation.php | 2 +- src/app/Http/Controllers/Operations/CreateOperation.php | 2 +- src/app/Http/Controllers/Operations/DeleteOperation.php | 2 +- src/app/Http/Controllers/Operations/ListOperation.php | 6 +++--- src/app/Http/Controllers/Operations/ReorderOperation.php | 4 ++-- .../Http/Controllers/Operations/RevisionsOperation.php | 4 ++-- src/app/Http/Controllers/Operations/ShowOperation.php | 2 +- src/app/Http/Controllers/Operations/UpdateOperation.php | 6 +++--- 11 files changed, 22 insertions(+), 19 deletions(-) diff --git a/src/CrudServiceProvider.php b/src/CrudServiceProvider.php index 006065406a..50335b3eda 100644 --- a/src/CrudServiceProvider.php +++ b/src/CrudServiceProvider.php @@ -94,7 +94,7 @@ public function register() // load a macro for Route, // for developers to be able to load all routes for a CRUD resource in one line - if (! Route::hasMacro('crudResource')) { + if (! Route::hasMacro('crud')) { $this->addRouteMacro(); } @@ -119,7 +119,8 @@ public function register() private function addRouteMacro() { Route::macro('crud', function ($name, $controller) { - // check if a specific route name was passed + // put together the route name prefix, + // as passed to the Route::group() statements $routeName = ''; if ($this->hasGroupStack()) { foreach ($this->getGroupStack() as $key => $groupStack) { @@ -132,7 +133,9 @@ private function addRouteMacro() } } } - $routeName .= $name.'.'; + // add the name of the current entity to the route name prefix + // the result will be the current route name (not ending in dot) + $routeName .= $name; // get an instance of the controller $groupStack = $this->hasGroupStack() ? $this->getGroupStack()[0]['namespace'].'\\' : 'App\\'; diff --git a/src/app/Http/Controllers/Operations/BulkCloneOperation.php b/src/app/Http/Controllers/Operations/BulkCloneOperation.php index b942a1ac54..23110337c1 100644 --- a/src/app/Http/Controllers/Operations/BulkCloneOperation.php +++ b/src/app/Http/Controllers/Operations/BulkCloneOperation.php @@ -16,7 +16,7 @@ trait BulkCloneOperation protected function setupBulkCloneRoutes($segment, $routeName, $controller) { Route::post($segment.'/bulk-clone', [ - 'as' => $routeName.'bulkClone', + 'as' => $routeName.'.bulkClone', 'uses' => $controller.'@bulkClone', ]); } diff --git a/src/app/Http/Controllers/Operations/BulkDeleteOperation.php b/src/app/Http/Controllers/Operations/BulkDeleteOperation.php index 6f29c2fb21..f3b5afe244 100644 --- a/src/app/Http/Controllers/Operations/BulkDeleteOperation.php +++ b/src/app/Http/Controllers/Operations/BulkDeleteOperation.php @@ -16,7 +16,7 @@ trait BulkDeleteOperation protected function setupBulkDeleteRoutes($segment, $routeName, $controller) { Route::post($segment.'/bulk-delete', [ - 'as' => $routeName.'bulkDelete', + 'as' => $routeName.'.bulkDelete', 'uses' => $controller.'@bulkDelete', ]); } diff --git a/src/app/Http/Controllers/Operations/CloneOperation.php b/src/app/Http/Controllers/Operations/CloneOperation.php index b7da9dc1b0..632b05865f 100644 --- a/src/app/Http/Controllers/Operations/CloneOperation.php +++ b/src/app/Http/Controllers/Operations/CloneOperation.php @@ -16,7 +16,7 @@ trait CloneOperation protected function setupCloneRoutes($segment, $routeName, $controller) { Route::post($segment.'/{id}/clone', [ - 'as' => $routeName.'clone', + 'as' => $routeName.'.clone', 'uses' => $controller.'@clone', ]); } diff --git a/src/app/Http/Controllers/Operations/CreateOperation.php b/src/app/Http/Controllers/Operations/CreateOperation.php index 9a8c380c4e..55e7b534d4 100644 --- a/src/app/Http/Controllers/Operations/CreateOperation.php +++ b/src/app/Http/Controllers/Operations/CreateOperation.php @@ -17,7 +17,7 @@ trait CreateOperation protected function setupCreateRoutes($segment, $routeName, $controller) { Route::get($segment.'/create', [ - 'as' => $routeName.'create', + 'as' => $routeName.'.create', 'uses' => $controller.'@create', ]); diff --git a/src/app/Http/Controllers/Operations/DeleteOperation.php b/src/app/Http/Controllers/Operations/DeleteOperation.php index 56da1d4e52..308eef9983 100644 --- a/src/app/Http/Controllers/Operations/DeleteOperation.php +++ b/src/app/Http/Controllers/Operations/DeleteOperation.php @@ -16,7 +16,7 @@ trait DeleteOperation protected function setupDeleteRoutes($segment, $routeName, $controller) { Route::delete($segment.'/{id}', [ - 'as' => $routeName.'destroy', + 'as' => $routeName.'.destroy', 'uses' => $controller.'@destroy', ]); } diff --git a/src/app/Http/Controllers/Operations/ListOperation.php b/src/app/Http/Controllers/Operations/ListOperation.php index 3d308c9bac..2d1da70575 100644 --- a/src/app/Http/Controllers/Operations/ListOperation.php +++ b/src/app/Http/Controllers/Operations/ListOperation.php @@ -16,17 +16,17 @@ trait ListOperation protected function setupListRoutes($segment, $routeName, $controller) { Route::get($segment.'/', [ - 'as' => $routeName.'index', + 'as' => $routeName.'.index', 'uses' => $controller.'@index', ]); Route::post($segment.'/search', [ - 'as' => $routeName.'search', + 'as' => $routeName.'.search', 'uses' => $controller.'@search', ]); Route::get($segment.'/{id}/details', [ - 'as' => $routeName.'showDetailsRow', + 'as' => $routeName.'.showDetailsRow', 'uses' => $controller.'@showDetailsRow', ]); } diff --git a/src/app/Http/Controllers/Operations/ReorderOperation.php b/src/app/Http/Controllers/Operations/ReorderOperation.php index 03743b523f..22ac8eb513 100644 --- a/src/app/Http/Controllers/Operations/ReorderOperation.php +++ b/src/app/Http/Controllers/Operations/ReorderOperation.php @@ -16,12 +16,12 @@ trait ReorderOperation protected function setupReorderRoutes($segment, $routeName, $controller) { Route::get($segment.'/reorder', [ - 'as' => $routeName.'reorder', + 'as' => $routeName.'.reorder', 'uses' => $controller.'@reorder', ]); Route::post($segment.'/reorder', [ - 'as' => $routeName.'save.reorder', + 'as' => $routeName.'.save.reorder', 'uses' => $controller.'@saveReorder', ]); } diff --git a/src/app/Http/Controllers/Operations/RevisionsOperation.php b/src/app/Http/Controllers/Operations/RevisionsOperation.php index 959eec9cc2..5db39e5c86 100644 --- a/src/app/Http/Controllers/Operations/RevisionsOperation.php +++ b/src/app/Http/Controllers/Operations/RevisionsOperation.php @@ -16,12 +16,12 @@ trait RevisionsOperation protected function setupRevisionsRoutes($segment, $routeName, $controller) { Route::get($segment.'/{id}/revisions', [ - 'as' => $routeName.'listRevisions', + 'as' => $routeName.'.listRevisions', 'uses' => $controller.'@listRevisions', ]); Route::post($segment.'/{id}/revisions/{revisionId}/restore', [ - 'as' => $routeName.'restoreRevision', + 'as' => $routeName.'.restoreRevision', 'uses' => $controller.'@restoreRevision', ]); } diff --git a/src/app/Http/Controllers/Operations/ShowOperation.php b/src/app/Http/Controllers/Operations/ShowOperation.php index af821f6f38..af0b3f0e2a 100644 --- a/src/app/Http/Controllers/Operations/ShowOperation.php +++ b/src/app/Http/Controllers/Operations/ShowOperation.php @@ -16,7 +16,7 @@ trait ShowOperation protected function setupShowRoutes($segment, $routeName, $controller) { Route::get($segment.'/{id}', [ - 'as' => $routeName.'show', + 'as' => $routeName.'.show', 'uses' => $controller.'@show', ]); } diff --git a/src/app/Http/Controllers/Operations/UpdateOperation.php b/src/app/Http/Controllers/Operations/UpdateOperation.php index df5d6b7471..7c024d2096 100644 --- a/src/app/Http/Controllers/Operations/UpdateOperation.php +++ b/src/app/Http/Controllers/Operations/UpdateOperation.php @@ -17,17 +17,17 @@ trait UpdateOperation protected function setupUpdateRoutes($segment, $routeName, $controller) { Route::get($segment.'/{id}/edit', [ - 'as' => $routeName.'edit', + 'as' => $routeName.'.edit', 'uses' => $controller.'@edit', ]); Route::put($segment.'/{id}', [ - 'as' => $routeName.'update', + 'as' => $routeName.'.update', 'uses' => $controller.'@update', ]); Route::get($segment.'/{id}/translate/{lang}', [ - 'as' => $routeName.'translateItem', + 'as' => $routeName.'.translateItem', 'uses' => $controller.'@translateItem', ]); } From fb007a8aa439ace286c8e8df55bef5c660a2d22a Mon Sep 17 00:00:00 2001 From: Cristian Tabacitu Date: Thu, 29 Aug 2019 11:25:37 +0300 Subject: [PATCH 12/12] fixed create operation route --- src/app/Http/Controllers/Operations/CreateOperation.php | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/app/Http/Controllers/Operations/CreateOperation.php b/src/app/Http/Controllers/Operations/CreateOperation.php index 55e7b534d4..20e75c5d2e 100644 --- a/src/app/Http/Controllers/Operations/CreateOperation.php +++ b/src/app/Http/Controllers/Operations/CreateOperation.php @@ -25,6 +25,11 @@ protected function setupCreateRoutes($segment, $routeName, $controller) 'as' => $routeName.'store', 'uses' => $controller.'@store', ]); + + Route::post($segment, [ + 'as' => $routeName.'store', + 'uses' => $controller.'@store', + ]); } /**