何を実現するか
ユーザー向けのサービスは別の言語でフロントエンド-バックエンド分けて作っている状況で、管理画面だけサクッと作り直しと言うか作る機会があったので、今更RailsAdminもあれなので新しいLaravel6でやってみることにしました。
サービスサイドと管理画面をオールインワンにするわけではないので、ドキュメントルート/に管理画面を持ってくるところまでサクッと手順を残します。
環境
- PHP 7.2
- Laravel 6.3
インストールからマイグレーションまで
新規作成からlaravel-adminをインストールする。入れてみたら普通に動いたので特に利用に問題はないと思われます。
laravel new
composer require encore/laravel-admin
php artisan vendor:publish --provider="Encore\Admin\AdminServiceProvider"
php artisan admin:install
管理画面だけ作成するので勝手に入ったUser周りのファイルを削除してからマイグレーションへ。
rm database/migrations/2014_10_12_000000_create_users_table.php
rm database/migrations/2014_10_12_100000_create_password_resets_table.php
rm app/User.php
データベース接続は作成
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=13306
DB_DATABASE=hoge
DB_USERNAME=root
DB_PASSWORD=hoge
マイグレーション実行
php artisan migrate
laravel-adminでモデルからコントローラーを作成する
モデルとコントローラーを作成する。コントローラーはadmin:makeでモデルを元に作成するので注意が必要。エンティティって呼ぶことの方が多いのでモデルって言うと自分の中で違和感が半端ない。
php artisan make:model Models\\Staff
php artisan admin:make StaffController --model=App\\Models\\Staff
コントローラーを作ると結果表示でルーティングに追加する行が表示されるので追加する
App\Admin\Controllers\StaffController created successfully.
Add the following route to app/Admin/routes.php:
$router->resource('staffs',StaffController::class);
app/Admin/route.phpの方に追加するので注意。
...
$router->resource('staffs',StaffController::class);
...
ルーティングと設定の変更
変更するファイルは下記の通り
- config/admin.php -> 14行目のnameと25行目のlogoだけ変えればいい
- routes/web.php -> /のルーティングを消す
- .env -> ADMIN_ROUTE_PREFIXを追加
.envにADMIN_ROUTE_PREFIXを/で追加すればドキュメントルートがadminになる。一番最後に追加すれば良い。
...
ADMIN_ROUTE_PREFIX=/
シーダーを作成してメニュー追加
php artisan make:seeder MenuSeeder
laravel-adminのメニューはmysqlのadmin_menuテーブルに格納されているので、今入っているものを確認。
mysql> select * from admin_menu;
+----+-----------+-------+---------------+--------------+------------------+------------+------------+------------+
| id | parent_id | order | title | icon | uri | permission | created_at | updated_at |
+----+-----------+-------+---------------+--------------+------------------+------------+------------+------------+
| 1 | 0 | 1 | Dashboard | fa-bar-chart | / | NULL | NULL | NULL |
| 2 | 0 | 2 | Admin | fa-tasks | | NULL | NULL | NULL |
| 3 | 2 | 3 | Users | fa-users | auth/users | NULL | NULL | NULL |
| 4 | 2 | 4 | Roles | fa-user | auth/roles | NULL | NULL | NULL |
| 5 | 2 | 5 | Permission | fa-ban | auth/permissions | NULL | NULL | NULL |
| 6 | 2 | 6 | Menu | fa-bars | auth/menu | NULL | NULL | NULL |
| 7 | 2 | 7 | Operation log | fa-history | auth/logs | NULL | NULL | NULL |
parent_id,order,title,icon,uriでレコードを作って追加すれば良いようなので、Seederに下記のように追記。これはユーザー管理を行う場合の例。
idがauto_incrementなのでparent_idの部分をもう少しちゃんとやりたいなら、一度全部削除して入れ直せるようにSeederを書いた方が良いので、すでに入っているレコードも記入した方が良いと思われます。
以下はUsersと言うメニューを追加する例。
public function run()
{
// $this->call(UsersTableSeeder::class);
DB::table('admin_menu')->insert([
[
"parent_id" => 0,
"order" => 8,
"title" => "Users",
"icon" => "fa-users",
"uri" => ""
],
[
"parent_id" => 8,
"order" => 9,
"title" => "Users",
"icon" => "fa-users",
"uri" => "users"
],
これで起動すればトップページにアクセスするとめでたく管理画面のログインページにリダイレクトされ、みることができるようになります。
php artisan serve
基本CRUDだけでなくリレーションとかも色々できるようなのですが記事はまた次回。