Как правильно добавлять дополнительные поля в пакет laravel -spat ie? - PullRequest
0 голосов
/ 19 июня 2020

1 Days a go Я начинаю пытаться научиться использовать пакет laravel spat ie, но сейчас я немного запутался, как правильно добавлять дополнительные поля в spat ie pacakage . Я пытаюсь следовать документации из spat ie web, чтобы расширить модели, и вот мой код.

Схема миграции

Schema::create($tableNames['roles'], function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->string('name');
            $table->string('color');
            $table->string('description');
            $table->string('guard_name');
            $table->timestamps();
        });

Переопределить модели

<?php

namespace App\Models;

use Spatie\Permission\Models\Role as SpatieRole;

class Role extends SpatieRole
{
    public function __construct(array $attributes = [])
    {
        parent::__construct($attributes);

        $this->mergeFillable(['color', 'description']);
    }
}

Тестирование контроллера

class RoleController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        $role = Role::where('name', 'Super Admin')->first();
        $roleAdmin = Role::where('name', 'Admin')->first();

        if (!$role) {
            Role::create([
                'name' => 'Super Admin',
                'color' => 'Black',
                'description' => 'Manage all the role and permission in the system'
            ]);
        }
        if (!$roleAdmin) {
            Role::create([
                'name' => 'Admin',
                'color' => 'Red',
                'description' => 'Manage users in the system'
            ]);
        }
        return Role::paginate(20);
    }

мой код сейчас работает нормально, но я действительно хотел знать, ошибаюсь ли я или есть способ получше. в общем, я все еще новичок с php и laravel, большое спасибо ~

1 Ответ

0 голосов
/ 19 июня 2020
  1. Вам нужно создать таблицу ролей? Лучше расширить, а не воссоздать таблицу, это на случай, если Package внесет изменения в миграцию ядра.
        Schema::table($tableNames['roles'], function (Blueprint $table) {
            $table->string('color');
            $table->string('description');
        });

Кроме того, если у вас должно быть несколько атрибутов, подобных выше, было бы даже лучше добавьте отдельную таблицу для этих атрибутов.

Я не уверен, почему вы добавляете новые роли в методе index(), я полагаю, для тестирования. Если это для тестирования, я бы предложил провести рефакторинг кода до следующего:
$roles = [[
    'name' => 'Super Admin',
    'color' => 'Black',
    'description' => 'Manage all the role and permission in the system'
], [
    'name' => 'Admin',
    'color' => 'Red',
    'description' => 'Manage users in the system'
]];

foreach($roles as $role) {
    Role::firstOrCreate($role);
}

return new RoleResource::collection(Role::all());

Вы хотели бы сначала использовать Laravel Seeders для заполнения ролей. Кроме того, если у вас всего несколько ролей, то вам, вероятно, не нужен метод paginate().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...