laravel11でアプリを作成

Laravel11

インストール

composer create-project laravel/laravel アプリの名前 "11.*"
cd アプリの名前
php artisan serve

MySQLのユーザー作成

mysql -u root -p

CREATE DATABASE アプリのDB DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

CREATE USER 'アプリの名前_user'@'localhost' IDENTIFIED BY '強いパスワード';

GRANT ALL PRIVILEGES ON アプリのDB.* TO 'アプリの名前_user'@'localhost';

FLUSH PRIVILEGES;
exit;

.envの設定

  • 上のMySQLユーザー作成時に設定を合わせる
APP_LOCALE=ja
APP_FALLBACK_LOCALE=ja
APP_FAKER_LOCALE=ja_JP

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=アプリのDB
DB_USERNAME=アプリの名前_user
DB_PASSWORD=強いパスワード
  • 以下ユーザー認証の導入後にmigrateを行う

ユーザー認証の導入

Breezeインストール

composer require laravel/breeze --dev

php artisan breeze:install blade

npm install && npm run dev
  • npm run dev でターミナルが操作できないので新しいターミナルを開く
    Screenshot
    Screenshot
php artisan migrate

bladeのbody書き換え

設計を見ながらコントローラ作成

  • 以下のコマンドでPostコントローラ、Postモデル、マイグレーションが作られる。
  • マイグレーションが不要なら -cr
php artisan make:model Post -mcr
  • 表示の確認だけなら、migrationとmodelのリレーションは飛ばす

マイグレーションの編集

database/migrations/xxxx_xx_xx_create_posts_table.php

public function up(): void
{
    Schema::create('posts', function (Blueprint $table) {
        $table->id();
        $table->foreignId('user_id')->constrained()->onDelete('cascade');
        $table->string('title');
        $table->text('body');
        $table->timestamps();
    });
}
php artisan migrate

viewファイルの作成

mkdir resources/views/posts
  • views/postsにcreate.blade.phpを作成
  • breezのスタイルはコンポーネントだけど、従来に合わせて普通型に変更
    • $slot 消す
    • @yield(‘content’) にして、普通のBladeページから @section(‘content’) で中身渡す

layouts/app.blade.php

bodyのみ置き換え

<body class="font-sans antialiased">
    <div class="container mx-auto p-4">
        @yield('content')
    </div>
</body>

コントローラーの編集

app/Http/Controllers/PostController.php

    public function create()
    {
        return view('posts.create');
    }

モデルのリレーションとstoreアクション

app/Http/Controllers/PostController.php

public function store(Request $request)
{
    $validated = $request->validate([
        'title' => 'required|string|max:255',
        'body' => 'required|string',
    ]);

    $request->user()->posts()->create($validated);

    return redirect()->route('posts.index')->with('success', '記事を投稿しました!');
}
  • UserとPostのリレーション

app/Models/User.php

public function posts()
{
    return $this->hasMany(Post::class);
}

app/Models/Post.php

public function user()
{
    return $this->belongsTo(User::class);
}
  • ここまででcreateができる

確認

http://localhost:8000/register