Help us understand the problem. What is going on with this article?

Laravel6にlaravel-aminで管理画面だけ作成

何を実現するか

ユーザー向けのサービスは別の言語でフロントエンド-バックエンド分けて作っている状況で、管理画面だけサクッと作り直しと言うか作る機会があったので、今更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

データベース接続は作成

.env
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の方に追加するので注意。

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になる。一番最後に追加すれば良い。

.env
...
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と言うメニューを追加する例。

database/seeders/MenuSeeder.php
    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だけでなくリレーションとかも色々できるようなのですが記事はまた次回。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした