onkbear / backpack-nested-crud
2.0.2
2020-09-20 21:48 UTC
Requires
- backpack/crud: ^4.1.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^2.16
README
此包为您在编辑页面上提供了嵌套 CRUD 操作。
例如。
将 comment
模型的 CRUD 操作作为字段添加到 user
编辑页面。
对于 Laravel-Backpack/CRUD v4.0,请使用 ^1.1
。
安装
composer require onkbear/backpack-nested-crud
使用方法
有四种(而不是创建、读取、更新、删除)嵌套 CRUD 操作。
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;
示例
请创建具有关系的 User
模型和 Comment
模型。
请创建 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 ]); } }
创建 CRUD 控制器
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); // ... }
添加路由
在 route/custom.php
中设置路由
Route::crud('user/', 'UserCrudController'); Route::group(['prefix' => 'user/{user_id}'], function() { Route::crud('comment', 'UserCommentCrudController'); });
您有以下路由。
admin/user/
admin/user/{user_id}/comment/
就是这样。
您还可以将 backpack 操作用于 UserCommentCrudController
或扩展(如果存在)CommentCrudController
。
自定义列表视图视图
有两个用于列表视图的模板。
nested_crud::nested_list
: 表格视图(默认)nested_crud::nested_grid_list
: 网格视图
如果您想使用网格视图,请使用以下设置方法。
// UserCommentCrudController.php protected function setupNestedListOperation() { $this->crud->setListView('nested_crud::nested_grid_list'); }
如果您在 resources/views/vendor/backpack/nested_crud
文件夹中创建了具有相同名称的视图文件,它将覆盖。