onkbear / backpack-nested-crud
Installs: 8 085
Dependents: 0
Suggesters: 0
Security: 0
Stars: 21
Watchers: 4
Forks: 10
Open Issues: 2
Language:Blade
Requires
- backpack/crud: ^4.1.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^2.16
README
This package gives nested CRUD operations on your edit page.
Inspired by Nested resources in Backpack CRUD
E.g.
Gives the avility of CRUD operations of comment
model as a field on user
edit page.
For Laravel-Backpack/CRUD v4.0, please use ^1.1
.
Install
composer require onkbear/backpack-nested-crud
Usage
There are four (instead of create, read, update, delete) nested CRUD operations.
use \Onkbear\NestedCrud\app\Http\Controllers\Operations\NestedListOperation; use \Onkbear\NestedCrud\app\Http\Controllers\Operations\NestedCreateOperation; use \Onkbear\NestedCrud\app\Http\Controllers\Operations\NestedUpdateOperation; use \Onkbear\NestedCrud\app\Http\Controllers\Operations\NestedDeleteOperation;
Example
Please create User
model and Comment
model with relationship.
Please create UserCrudController
.
class UserCrudController extends CrudController { use \Backpack\CRUD\app\Http\Controllers\Operations\ListOperation; use \Backpack\CRUD\app\Http\Controllers\Operations\CreateOperation; use \Backpack\CRUD\app\Http\Controllers\Operations\UpdateOperation; public function setup() { CRUD::setModel('App\Models\User'); CRUD::setRoute(config('backpack.base.route_prefix').'/user'); CRUD::setEntityNameStrings('user', 'users'); } protected function setupListOperation() { CRUD::addColumns(['name']); } protected function setupCreateOperation() { CRUD::addField([ 'name' => 'name', 'label' => 'Name', 'type' => 'text', 'tab' => 'Texts', ]); } protected function setupUpdateOperation() { $this->setupCreateOperation(); CRUD::addField([ 'name' => 'comments', 'label' => 'Comment', 'type' => 'nested_crud', 'target' => 'comment', 'model' => 'App\Models\Comment', 'tab' => 'Comments', // optional ]); } }
Create the CRUD controller
use App\Http\Requests\CommentRequest as StoreRequest; use App\Http\Requests\CommentRequest as UpdateRequest; class UserCommentCrudController extends CrudController { use \Onkbear\NestedCrud\app\Http\Controllers\Operations\NestedListOperation; use \Onkbear\NestedCrud\app\Http\Controllers\Operations\NestedCreateOperation; use \Onkbear\NestedCrud\app\Http\Controllers\Operations\NestedUpdateOperation; use \Onkbear\NestedCrud\app\Http\Controllers\Operations\NestedDeleteOperation; public function setup() { // set the Eloquent object CRUD::setModel(\App\Models\Comment::class); // get the user_id parameter $userId = \Route::current()->parameter('user_id'); // set a different route for the admin panel buttons CRUD::setRoute(config('backpack.base.route_prefix').'/user/'.$userId.'/comment'); // show only specific user's comments CRUD::addClause('where', 'user_id', $userId); // ... } protected function setupNestedListOperation() { // ... } protected function setupNestedCreateOperation() { CRUD::setValidation(StoreRequest::class); // get the user_id parameter $userId = \Route::current()->parameter('user_id'); // add a foreign key field as a hidden field (may need only for create operation) CRUD::addField([ 'name' => 'user_id', 'type' => 'hidden', 'value' => $userId ]); // ... } protected function setupNestedUpdateOperation() { CRUD::setValidation(UpdateRequest::class); // ... }
Add the route
Setup the route in route/custom.php
Route::crud('user/', 'UserCrudController'); Route::group(['prefix' => 'user/{user_id}'], function() { Route::crud('comment', 'UserCommentCrudController'); });
You have following routes.
admin/user/
admin/user/{user_id}/comment/
That's it.
You can also use backpack operations into UserCommentCrudController
or extend CommentCrudController
if it is exist.
Customize views for list view
There are two templates for list view.
nested_crud::nested_list
: table view (default)nested_crud::nested_grid_list
: grid view
If you would like to use grid view, simply use the set method below.
// UserCommentCrudController.php protected function setupNestedListOperation() { $this->crud->setListView('nested_crud::nested_grid_list'); }
If you created view files with exact same name in resources/views/vendor/backpack/nested_crud
folder, it will override.