LoginSignup
35
40

More than 1 year has passed since last update.

Laravel8系でlaravel-adminを使ってみたメモ

Last updated at Posted at 2021-05-28

Laravel-adminとは

簡単に管理画面が構築できるライブラリです。
今回こちらのライブラリを使って簡単に管理画面を構築してみたので、使い方をまとめます。

インストール

composer require encore/laravel-admin
php artisan vendor:publish --provider="Encore\Admin\AdminServiceProvider"
php artisan admin:install

これだけでインストールは完了です。簡単ですね。
あとはブラウザで/adminとアクセスすると管理画面のログイン画面が表示されます。スクリーンショット 2021-05-25 9.47.47.png

もしadmin_userを消してしまった場合

migrate:fresh などをしてもしlaravel-adminで登録されたデータ全て初期化してしまったら、元に戻すのがめんどくさいのでSeederを作っておくのをお勧めします。

/database/seeders/AdminTablesSeeder.php
<?php
namespace Database\Seeders;

use Illuminate\Database\Seeder;
use Encore\Admin\Auth\Database\Administrator;
use Encore\Admin\Auth\Database\Role;
use Encore\Admin\Auth\Database\Permission;
use Encore\Admin\Auth\Database\Menu;
use Illuminate\Support\Facades\Hash;

class AdminTablesSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        // create a user.
        Administrator::truncate();
        Administrator::create([
            'username' => 'admin',
            'password' => Hash::make('admin'),
            'name'     => 'Administrator',
        ]);

        // create a role.
        Role::truncate();
        Role::create([
            'name' => 'Administrator',
            'slug' => 'administrator',
        ]);

        // add role to user.
        Administrator::first()->roles()->save(Role::first());

        //create a permission
        Permission::truncate();
        Permission::insert([
            [
                'name'        => 'All permission',
                'slug'        => '*',
                'http_method' => '',
                'http_path'   => '*',
            ],
            [
                'name'        => 'Dashboard',
                'slug'        => 'dashboard',
                'http_method' => 'GET',
                'http_path'   => '/',
            ],
            [
                'name'        => 'Login',
                'slug'        => 'auth.login',
                'http_method' => '',
                'http_path'   => "/auth/login\r\n/auth/logout",
            ],
            [
                'name'        => 'User setting',
                'slug'        => 'auth.setting',
                'http_method' => 'GET,PUT',
                'http_path'   => '/auth/setting',
            ],
            [
                'name'        => 'Auth management',
                'slug'        => 'auth.management',
                'http_method' => '',
                'http_path'   => "/auth/roles\r\n/auth/permissions\r\n/auth/menu\r\n/auth/logs",
            ],
        ]);

        Role::first()->permissions()->save(Permission::first());

        // add default menus.
        Menu::truncate();
        Menu::insert([
            [
                'parent_id' => 0,
                'order'     => 1,
                'title'     => 'Dashboard',
                'icon'      => 'fa-bar-chart',
                'uri'       => '/',
            ],
            [
                'parent_id' => 0,
                'order'     => 2,
                'title'     => 'Admin',
                'icon'      => 'fa-tasks',
                'uri'       => '',
            ],
            [
                'parent_id' => 2,
                'order'     => 3,
                'title'     => 'Users',
                'icon'      => 'fa-users',
                'uri'       => 'auth/users',
            ],
            [
                'parent_id' => 2,
                'order'     => 4,
                'title'     => 'Roles',
                'icon'      => 'fa-user',
                'uri'       => 'auth/roles',
            ],
            [
                'parent_id' => 2,
                'order'     => 5,
                'title'     => 'Permission',
                'icon'      => 'fa-ban',
                'uri'       => 'auth/permissions',
            ],
            [
                'parent_id' => 2,
                'order'     => 6,
                'title'     => 'Menu',
                'icon'      => 'fa-bars',
                'uri'       => 'auth/menu',
            ],
            [
                'parent_id' => 2,
                'order'     => 7,
                'title'     => 'Operation log',
                'icon'      => 'fa-history',
                'uri'       => 'auth/logs',
            ],
        ]);

        // add role to menu.
        Menu::find(2)->roles()->save(Role::first());
    }
}

作成したAdminTablesSeederDatabaseSeeder.php に追加する

/database/seeders/DatabaseSeeder.php
<?php

namespace Database\Seeders;

use Illuminate\Database\Seeder;

class DatabaseSeeder extends Seeder
{
    /**
     * Seed the application's database.
     *
     * @return void
     */
    public function run()
    {
        $this->call([
            AdminTablesSeeder::class,
        ]);
    }
}

こちらの記事を参考にしました。

管理画面用コントローラー作成

ドキュメントでは、

php artisan admin:make UserController --model=App\\User

こうなっていますが、Laravel8系からはモデルのディレクトリがapp/Modelsに変更になっているので、注意が必要です。
こんな感じで実行。

php artisan admin:make UserController --model=App\\Models\\User

あとは/app/Admin/routes.php にルーティングを追加する。

/app/Admin/routes.php
<?php

use Illuminate\Routing\Router;

Admin::routes();

Route::group([
    'prefix'        => config('admin.route.prefix'),
    'namespace'     => config('admin.route.namespace'),
    'middleware'    => config('admin.route.middleware'),
    'as'            => config('admin.route.prefix') . '.',
], function (Router $router) {

    $router->get('/', 'HomeController@index')->name('home');
    $router->resource('/users', UserController::class); // 追加

});

一覧

コントローラー作成を実行すると、/app/Admin/Controllers/ ディレクトリに作成したコントローラーが出来るのでそこを編集していくだけで管理画面が作成できます。
gridというのが一覧用になります。

/app/Admin/Controllers/UserController.php
/**
 * Make a grid builder.
 *
 * @return Grid
 */
protected function grid()
{
    $grid = new Grid(new User());

    $grid->column('id', __('Id'));
    $grid->column('name', __('Name'));
    $grid->column('email', __('Email'));
    $grid->column('email_verified_at', __('Email verified at'));
    $grid->column('password', __('Password'));
    $grid->column('remember_token', __('Remember token'));
    $grid->column('created_at', __('Created at'));
    $grid->column('updated_at', __('Updated at'));

    return $grid;
}

少し応用的な使い方

ステータスなどフラグ的なカラム

displayを使います。

$grid->column('status','ステータス')->display(function () {
    $status = config('const.status');
    return $status[$this->status];
});

作成・変更

formというのが作成・変更用になります。

/app/Admin/Controllers/UserController.php
/**
 * Make a form builder.
 *
 * @return Form
 */
protected function form()
{
    $form = new Form(new User());

    $form->text('name', __('Name'));
    $form->email('email', __('Email'));
    $form->datetime('email_verified_at', __('Email verified at'))->default(date('Y-m-d H:i:s'));
    $form->password('password', __('Password'));
    $form->text('remember_token', __('Remember token'));

    return $form;
}

バリデーション

基本的なよくあるLaravelのバリデーションルールをruleで追加していくだけ。
バリデーションを参照

$form->text('title')->rules('required|min:3');

少し応用的な使い方

作成後に一覧へ遷移

詳細はコールバック参照

$form->saved(function (Form $form) {
    return redirect('/admin/users');
});

初期設定を変更したい

/app/Admin/bootstrap.php に共通の設定を書いていく。

/app/Admin/bootstrap.php
<?php
~~省略~~
use Encore\Admin\Form;
use Encore\Admin\Grid;
Grid::init(function (Grid $grid) {
    // disabled
    $grid->actions(function ($actions) {
        $actions->disableView();
    });
    $grid->disableExport();
    $grid->disableColumnSelector();
});

Form::forget(['map', 'editor']);

Form::init(function (Form $form) {
    // disabled
    $form->tools(function (Form\Tools $tools) {
        $tools->disableView();
    });
    $form->footer(function ($footer) {
        $footer->disableViewCheck();
        $footer->disableEditingCheck();
        $footer->disableCreatingCheck();
    });
});

日本語化

こちらの記事を参考にしました

/config/app.php
//'timezone' => 'UTC',
'timezone' => 'Asia/Tokyo',

//'locale' => 'en',
'locale' => 'ja',

さらにlaravel-adminの日本語訳が気に入らなかったらこちらを修正。
/resources/lang/ja/admin.php

35
40
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
35
40