【メモ】Laravel8 について


このページまでお越しいただきありがとうございます。

##はじめに
Laravel8の学習記録です。

この記事は以下のことを記録として残しております。
・Laravel8 Sailの環境構築
・投稿の取得、作成、編集、削除のAPI作成

##Laravel8 sailの環境構築

①Docker Desktopをダウンロードする
ダウンロードはこちら

②以下コマンドを実行してLaravel8の環境構築します。

$ curl -s "https://laravel.build/example-app?with=mysql,mailhog" | bash

※example-appの部分は好きなアプリ名に変更します。(この記事ではexample-appにしています)

③アプリケーションディレクトリに移動してLaravel Sailを起動するために以下のコマンドを実行

$ cd example-app && ./vendor/bin/sail up

※example-appの部分は③のコマンドで設定したアプリ名を入力してください。

起動後に"http://localhost/" にアクセスすると初期画面に行くか確認してください。

参考記事
公式ドキュメント

##投稿の取得、作成、編集、削除のAPI作成

###マイグレーションファイルを作成して、データベースにpostsテーブルを生成する
マイグレーションについて

アプリケーションディレクトリで以下コマンドを実行してマイグレーションファイルを作成します。

./vendor/bin/sail artisan make:migrataion create_posts_table

作成さいれたマイグレーションファイルに以下コードを記述します。

database/migrations/2021_10_23_072133_create_post_table.php
<?php

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

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

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

migrateを実行してデータベースにpostsテーブルを作成します。

./vendor/bin/sail artisan migrate

####postsテーブルができているかの確認方法
アプリケーションディレクトリからmysqlに入ります。

./vendor/bin/sail exec mysql mysql -u root -p

パスワードを求められたら、.envファイルに記述のパスワードを入力します。

$ use <データベース名>;
$ show tables;
+------------------------+
| Tables_in_example_app  |
+------------------------+
| failed_jobs            |
| migrations             |
| password_resets        |
| personal_access_tokens |
| posts                  |
| users                  |
+------------------------+

postsテーブルがあることが確認できました。

###モデルを作成する

以下コマンドを実行してPostモデルを作成します。

./vendor/bin/sail artisan make:model Post

モデルファイルを開いて以下コードを記述します。※今回は論理削除のみ設定

app/Models/Post.php
<?php

namespace App\Models;

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

class Post extends Model
{
    use HasFactory;
    use SoftDeletes;
}

###コントローラーを作成
以下コマンドを実行してPostControllerを作成します。

./vendor/bin/sail artisan make:controller PostController

コントローラーには以下のコードを記述をします。
※今回は処理ができることを第一の目的にしているためfatControllerになっているかと思いますが、ご容赦ください。

app/Http/Controllers/PostController
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Models\Post;

class PostController extends Controller
{
				public function index() {
								$posts = Post::all();
								return response()->json($posts);
				}
				public function store(Request $request) {

								if (empty($request->input('title')) || empty($request->input('content')) || mb_strlen($request->input('title')) >= 100 || mb_strlen($request->input('content')) >= 100) {
										return '失敗';
								}
								$post = new Post();
								$post->title = $request->input('title');
								$post->content = $request->input('content');
								$post->save();
								return response()->json($post);
				}

				public function edit(Request $request) {
								if (!Post::where('id', $request->input('id'))->exists() || empty($request->input('title')) || empty($request->input('content')) || mb_strlen($request->input('title')) >= 100 || mb_strlen($request->input('content')) >= 100 ){
										return '失敗';
								}
								$post = Post::find($request->input('id'));
								$post->title = $request->input('title');
								$post->content = $request->input('content');
								$post->save();
								return response()->json($post);
				}

				public function delete(Request $request) {
								if (!Post::where('id', $request->input('id'))->exists()){
										return '失敗';
								}
								$post = Post::where('id', $request->input('id'))->delete();
								return '成功';
				}
}

###api.phpに記述する

rotues/api.php

<?php

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\PostController;

/*
|--------------------------------------------------------------------------
| API Routes
|--------------------------------------------------------------------------
|
| Here is where you can register API routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| is assigned the "api" middleware group. Enjoy building your API!
|
*/

Route::middleware('auth:sanctum')->get('/user', function (Request $request) {
    return $request->user();
});

Route::get('/index', [PostController::class, 'index']);
Route::post('/store', [PostController::class, 'store']);
Route::post('/edit', [PostController::class, 'edit']);
Route::get('/delete', [PostController::class, 'delete']);

####動作確認方法
postmanを使用して動作確認しました。
postmanダウンロード

無事データを取得出来ていることが確認できます。

###コンテナを停止します。
最後はコンテナを停止しましょう。

./vendor/bin/sail down

以上で記録を終了いたします。
最後まで読んでいただきありがとうございました。

※毎回./vendor/bin/sail を打つのがめんどくさい場合はaliasの設定をしておくとコマンドを打つのが楽になります。