onkbear/backpack-nested-crud

2.0.2 2020-09-20 21:48 UTC

This package is auto-updated.

Last update: 2024-09-21 06:41:21 UTC


README

Latest Stable Version Software License

此包为您在编辑页面上提供了嵌套 CRUD 操作。

Backpack CRUD 中的嵌套资源启发

例如。

comment 模型的 CRUD 操作作为字段添加到 user 编辑页面。

对于 Laravel-Backpack/CRUD v4.0,请使用 ^1.1

Demo

安装

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 : 网格视图

Grid View

如果您想使用网格视图,请使用以下设置方法。

// UserCommentCrudController.php

    protected function setupNestedListOperation()
    {
        $this->crud->setListView('nested_crud::nested_grid_list');
    }

如果您在 resources/views/vendor/backpack/nested_crud 文件夹中创建了具有相同名称的视图文件,它将覆盖。