Laravel フレームワーク初期導入の手順の覚書 便利なlaravel-adminを導入してみる

Laravel フレームワーク初期導入の手順の覚書 便利なlaravel-adminを導入してみる

ここでは一般的に laravel を初期導入する際に必要な事を覚書。

参考サイト

https://mashmy.net/blog/%E7%B0%A1%E5%8D%98%E3%81%AB%E7%AE%A1%E7%90%86%E7%94%BB%E9%9D%A2%E3%82%92%E4%BD%9C%E3%82%8C%E3%82%8Blaravel-admin%E3%81%AE%E3%82%BB%E3%83%83%E3%83%88%E3%82%A2%E3%83%83%E3%83%97%E6%96%B9%E6%B3%95%E3%82%92%E8%A7%A3%E8%AA%AC

laravel 初期導入手順の覚書

ここでは、composer や php、xamppはインストール済みの環境が整っている物とする。

laravel プロジェクトの新規作成。バージョン指定付き。

composer create-project "laravel/laravel=9.*" sales --prefer-dist

mysql myadmin で新規にデータベース作る

新規にデータベースを作成する。照合順序=utf8mb4_general_ci。

laravel プロジェクトDB情報(.env)の設定

.env の DB_*** の箇所を設定する。

laravel-admin インストール

Laravelの管理画面用パッケージ「laravel-admin」をインストールする。

まず、プロジェクトフォルダへ移動する。

cd sales
composer require encore/laravel-admin

次にasset、configファイルを移動させる。

php artisan vendor:publish --provider="Encore\Admin\AdminServiceProvider"

最後に下記コマンドを実行することでインストールが完了。

php artisan admin:install

インストール後のデータベース。各テーブルが用意されました。

WEBサーバーをいずれかの方法で起動します。

php artisan serve

または、xampp の apache を起動。

その後、下記のURLにアクセスします。

http://localhost/sales/public/admin/

※ちなみに、laravel デフォルトのTOPは、

http://localhost/sales/public/

初期の管理者として、admin/admin が登録済み。adminでログインしてみる。

コマンドで管理者を作成する方法。初期管理者のadmin以外を

php artisan admin:create

> taro@test.com

> taro@test.com

> taro@test.com

ログインしてみる。taro@test.com

ログインてきました。

サンプルアプリ(Blog)を作ってみる

blogサンプルアプリを追加して、laravel-adminのメニュー追加する。

まずは、

テーブルを作成(マイグレーション)する

php artisan make:migration create_blogs_table --create=blogs

生成された、database>migrations>マイグレーションファイル を編集する。カラムを追加する。

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('blogs', function (Blueprint $table) {
            $table->id();
            $table->string('title');
            $table->text('text');
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('blogs');
    }
};

マイグレーション実行する

php artisan migrate

データベースに反映されている事を確認。

Modelからアプリ作成する

larave-adminはadmin:makeコマンドを使用してアプリを作成する。

Models > 配下に下記のモデルを作成する

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Blog extends Model
{
    use HasFactory;

    protected $fillable = [
        'title',
        'text'
    ];
}

Blogモデルのアプリを作成します。

php artisan admin:make BlogController --model=App\Models\Blog

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);
    $router->resource('blogs', BlogController::class);

});

作成されたコントローラー(BlogController)です。

<?php

namespace App\Admin\Controllers;

use App\Models\Blog;
use Encore\Admin\Controllers\AdminController;
use Encore\Admin\Form;
use Encore\Admin\Grid;
use Encore\Admin\Show;

class BlogController extends AdminController
{
    /**
     * Title for current resource.
     *
     * @var string
     */
    protected $title = 'Blog';

    /**
     * Make a grid builder.
     *
     * @return Grid
     */
    protected function grid()
    {
        $grid = new Grid(new Blog());

        $grid->column('id', __('Id'));
        $grid->column('title', __('Title'));
        $grid->column('text', __('Text'));
        $grid->column('created_at', __('Created at'));
        $grid->column('updated_at', __('Updated at'));

        return $grid;
    }

    /**
     * Make a show builder.
     *
     * @param mixed $id
     * @return Show
     */
    protected function detail($id)
    {
        $show = new Show(Blog::findOrFail($id));

        $show->field('id', __('Id'));
        $show->field('title', __('Title'));
        $show->field('text', __('Text'));
        $show->field('created_at', __('Created at'));
        $show->field('updated_at', __('Updated at'));

        return $show;
    }

    /**
     * Make a form builder.
     *
     * @return Form
     */
    protected function form()
    {
        $form = new Form(new Blog());

        $form->text('title', __('Title'));
        $form->textarea('text', __('Text'));

        return $form;
    }
}

メニューに追加します。Admin>Menu 。

こんな感じです。

その他、パラメータ値の変更、覚書

さくらレンタルサーバーで動かそうとすると認証画面でログインできない。laravel-adminのhttps化を有効にする必要がある

/config/admin.php の false → trueへ

'https' => env('ADMIN_HTTPS', true),

Adminアカウントのユーザー設定画面で『Disk [admin] not configured, please add a disk config in config/filesystems.php.』エラーが出た‥

/config/filesystems.php に admin情報を追記


    'disks' => [

        'local' => [
            'driver' => 'local',
            'root' => storage_path('app'),
            'throw' => false,
        ],

        'public' => [
            'driver' => 'local',
            'root' => storage_path('app/public'),
            'url' => env('APP_URL').'/storage',
            'visibility' => 'public',
            'throw' => false,
        ],

        's3' => [
            'driver' => 's3',
            'key' => env('AWS_ACCESS_KEY_ID'),
            'secret' => env('AWS_SECRET_ACCESS_KEY'),
            'region' => env('AWS_DEFAULT_REGION'),
            'bucket' => env('AWS_BUCKET'),
            'url' => env('AWS_URL'),
            'endpoint' => env('AWS_ENDPOINT'),
            'use_path_style_endpoint' => env('AWS_USE_PATH_STYLE_ENDPOINT', false),
            'throw' => false,
        ],

        'admin' => [
            'driver' =>'local',
            'root' => public_path('uploads'),
            'visibility' =>'public',
            'url' => env('APP_URL').'/uploads',
        ],

その他、laravel 初期設定

ここで気づいたのですが、laravelの基本的、または推奨する初期設定となります。

タイムゾーン、言語設定

config/app.php

    // アプリケーションデフォルトのタイムゾーンを設定できます。
    // PHPの日付および日時関数を使用する際にこの設定を参照します。
    'timezone' => 'Asia/Tokyo',

    // 翻訳サービスプロバイダーが使用するデフォルトのロケールを設定します。
    'locale' => 'ja',

    // フォールバックロケールは、指定したロケールが使用できない場合に使用するロケールを決定します。
    'fallback_locale' => 'ja',

    // FakerPHPライブラリがデータを生成する際に使用されます。
    'faker_locale' => 'ja_JP',