Laravel-adminとは
簡単に管理画面が構築できるライブラリです。
今回こちらのライブラリを使って簡単に管理画面を構築してみたので、使い方をまとめます。
インストール
composer require encore/laravel-admin
php artisan vendor:publish --provider="Encore\Admin\AdminServiceProvider"
php artisan admin:install
これだけでインストールは完了です。簡単ですね。
あとはブラウザで/admin
とアクセスすると管理画面のログイン画面が表示されます。
もしadmin_userを消してしまった場合
migrate:fresh
などをしてもしlaravel-adminで登録されたデータ全て初期化してしまったら、元に戻すのがめんどくさいのでSeederを作っておくのをお勧めします。
<?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());
}
}
作成したAdminTablesSeeder
を 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
にルーティングを追加する。
<?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というのが一覧用になります。
/**
* 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というのが作成・変更用になります。
/**
* 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
に共通の設定を書いていく。
<?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();
});
});
日本語化
こちらの記事を参考にしました
//'timezone' => 'UTC',
'timezone' => 'Asia/Tokyo',
//'locale' => 'en',
'locale' => 'ja',
さらにlaravel-adminの日本語訳が気に入らなかったらこちらを修正。
/resources/lang/ja/admin.php