こんにちは、Laravel で簡単に管理画面を作成できる Laractive Admin を作ったので、使い方を紹介していきたいと思います。
環境
Laractive Admin のインストール
まずは Composer で Laractive Admin をインストールします。
$ composer require enomotodev/laractive-admin
インストールできたら artisan コマンドで Laractive Admin を初期化します。
$ php artisan laractive-admin:install
初期化コマンドを実行すると、次のファイルが生成されます。
- app/Admin/AdminUser.php
- app/database/migrations/[timestamp]_create_admin_users_table.php
- app/database/migrations/[timestamp]_create_laractive_admin_comments_table.php
マイグレーションファイルが生成されたのでマイグレーションを実行します。
$ php artisan migrate
これで admin_users
テーブルと laractive_admin_comments
テーブルが作成されました。
次のコマンドで admin_users
テーブルに初期ログイン用のデータが作成されます。
$ php artisan laractive-admin:seed
ログイン用のデータが作成されたので、ブラウザで /admin
を開きます。
先ほどの php artisan laractive-admin:seed
コマンドでログイン用のアカウントが作成されているので、そのアカウントでログインします。
- User: admin@example.com
- Password: password
これでログイン機能をもった管理画面が簡単に作成されました!
それでは次から実際に他のモデルを作成して、それらの管理機能も作っていきたいと思います。
著者(Author)管理を作成する
それでは name
カラムをもつ Author モデルを作成して、Author を管理できるようにしていきましょう。
まずはモデルとマイグレーションを作成して、マイグレーションを実行します。
$ php artisan make:model Author -m
- [timestamp]_create_authors_table.php
<?php use Illuminate\Support\Facades\Schema; use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Migrations\Migration; class CreateAuthorsTable extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::create('authors', function (Blueprint $table) { $table->increments('id'); $table->string('name'); $table->timestamps(); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::dropIfExists('authors'); } }
- app/Author.php
<?php namespace App; use Illuminate\Database\Eloquent\Model; class Author extends Model { /** * @var array */ protected $fillable = [ 'name', ]; }
忘れずに $fillable
に name
を設定しておきましょう。
ここまで作成できたらマイグレーションを実行します。
$ php artisan migrate
下準備はできたので、管理画面に Author 管理のページを作成しましょう。
管理画面にページを追加するには app/Admin/
配下に Enomotodev\LaractiveAdmin\Http\Controllers\Controller
を継承したクラスを作成して、$model
プロパティに管理する対象のモデルを指定します。
- app/Admin/Author.php
<?php namespace App\Admin; use Enomotodev\LaractiveAdmin\Http\Controllers\Controller; class Author extends Controller { /** * @var string */ public $model = \App\Author::class; }
ブラウザで再度確認してみると、メニューに Author が追加されているのが確認できると思います。
この状態でもデータを新規作成できるのですが、バリデーションがないので、app/Admin/Author.php
にバリデーションを追加します。
バリデーションを追加するには、$validate
プロパティに通常と同じようにバリデーションルールを追加します。
- app/Admin/Author.php
<?php namespace App\Admin; use Enomotodev\LaractiveAdmin\Http\Controllers\Controller; class Author extends Controller { /** * @var string */ public $model = \App\Author::class; /** * @var array */ protected $validate = [ 'name' => 'required|max:100', ]; }
バリデーションが追加されたので実際に name を空にしてフォームを送信するとエラーが表示されます。
データを登録すると一覧画面には次のように表示されるのが確認できると思います。
書籍(Book)管理を作成する
Author 管理ができたので、Author に対して BelongsTo の関係である Book モデルを作成したいと思います。
Book モデルは author_id, title, description, main_image カラムをもち、画像をアップロードできるようにしたいと思います。
まずは、モデルとマイグレーションを作成して、マイグレーションを実行します。
$ php artisan make:model Book -m
- [timestamp]_create_books_table.php
<?php use Illuminate\Support\Facades\Schema; use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Migrations\Migration; class CreateBooksTable extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::create('books', function (Blueprint $table) { $table->increments('id'); $table->integer('author_id'); $table->string('title'); $table->text('description'); $table->string('main_image'); $table->timestamps(); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::dropIfExists('books'); } }
- app/Book.php
<?php namespace App; use Illuminate\Database\Eloquent\Model; class Book extends Model { /** * @var array */ protected $fillable = [ 'author_id', 'title', 'description', 'main_image', ]; /** * @return \Illuminate\Database\Eloquent\Relations\BelongsTo */ public function author() { return $this->belongsTo(Author::class); } }
マイグレーションを実行します。
$ php artisan migrate
それではモデルができたので、Author と同様に app/Admin/
配下に Book 管理用のファイルを作成します。
- app/Admin/Book.php
<?php namespace App\Admin; use Enomotodev\LaractiveAdmin\Http\Controllers\Controller; class Book extends Controller { /** * @var string */ public $model = \App\Book::class; /** * @var array */ protected $validate = [ 'author_id' => 'required', 'title' => 'required', 'description' => 'required', 'main_image' => 'required|image', ]; }
バリデーションを書くのを忘れないように気をつけてください
ブラウザで確認すると Author Id の部分がセレクトになっているのに注目してください。
これは belongsTo
で定義したモデルのデータが選択できるようになっています。
一方、Main Imageを確認するとファイルをアップロードしたいのに、テキスト入力になってしまっています。
ファイルをアップロードするには app/Admin/Book.php
に $files
プロパティを定義する必要があります。
早速 $files
プロパティを定義してみましょう。
// ...
class Book extends Controller
{
// ...
/**
* @var array
*/
protected $files = [
'main_image',
];
}
$files
プロパティを定義した後にブラウザで確認すると、フォーム要素がテキストからファイルになっているのが確認できると思います!
まとめ
個人的に最近久しぶりに Laravel を触っているのですが、毎回管理画面を作ったりするのが面倒だったので、OSS として Laractive Admin を作ってみました。
当初、カラムを定義するのが面倒だったので、DESCRIBE
コマンドでテーブル定義を参照して、そこからフォームを生成していたりするのですが、モデルに $fillable
が定義されているのであれば、そこから色々生成してもいいのかなーと思ってます。
これから、どんどん機能を増やしていきたいと思っているので、ぜひ触ってみて PR ください!!
React,Angular,Vue.js,React Nativeを使って学ぶ はじめてのフロントエンド開発
- 作者: 原一浩,taisa,小松大輔,永井孝,池内孝啓,新井正貴,橋本安司,日野洋一郎
- 出版社/メーカー: 技術評論社
- 発売日: 2018/05/09
- メディア: Kindle版
- この商品を含むブログを見る
- 作者: 石橋啓太,丸山弘詩
- 出版社/メーカー: マイナビ出版
- 発売日: 2018/03/23
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る