🎷

PHP開発 3日目

2024/04/30に公開

Laravel

Laravel Breezeを使ってみよう

忘れないうちにLaravelをやります。
簡単なアプリを作るだけなら多分PHPをそのまま書いたほうが簡単だな、、、と思いつつも、csrf対策とかセキュリティ部分を自分で作ってたらどれだけ時間がかかるんだと。バグだらけで挫折しそうですし。
というわけで、今日もLaravel
ハンズオン講義でほぼ導入されるLaravel Breeze。これは何をやってて何ができるの?
講座だとユーザー認証が勝手に出来て、すごいでしょう?と教えてもらって、確かにすごいけど中身どうなってるの?と疑問だらけ。
昨日判明したことでは、BladeはBreeze入れなくてもデフォルトで使えるみたい。
ハンズオン講座だと、viewのところにlayoutやslotが登場していたので、フロントFW的な役割を加えられるのか、、、正直わかりません。
とりあえず調べながら作っていきます。

Day3 ユーザー認証つきのおみくじアプリ

色々な知識が曖昧なので、しっかりと理解するまではおみくじを流用することにしよう。

ディレクトリは新しいものを作って、DBは同じものを流用するのが楽ですね

新しいプロジェクトの作成

composer create-project laravel/laravel omikuji "10.*"

今回もLaravel10で作成します。

Laravel Breezeの導入

composer require laravel/breeze --dev

この--devオプションはなんだろう?

php artisan breeze:install blade
php artisan migrate
npm install
npm run dev

ランデブで起動すると、Laravel用のローカルサーバーとnodeモジュールのローカルサーバーが立ち上がりますね。viteで変換しているんだっけ?フロントにもっと強くなりたい。
案の定、MAMPのローカルサーバーと競合してうまく開かないです。  
MAMPのドキュメントルートをプロジェクトフォルダ内のpublicを指定して無事起動
フロントもバックも結局同じローカルホストのポート番号になってました。
どうせ、何か作ってもLAMPサーバーにアップしたいので、この方法で試したほうがいいや。
Docker使ってVPSにデプロイとかならこの方法だと良くなさそうですが、今はインフラ構築できる自信がないので、MAMPベースで確認します。

認証

さて、LoginとRegisterが出来上がっていますね。
ここは良くハンズオン講座で見てるところ。どうなっているのかはわかりませんが。

web.php
Route::get('/dashboard', function () {
    return view('dashboard');
})->middleware(['auth', 'verified'])->name('dashboard');

Route::middleware('auth')->group(function () {
    Route::get('/profile', [ProfileController::class, 'edit'])->name('profile.edit');
    Route::patch('/profile', [ProfileController::class, 'update'])->name('profile.update');
    Route::delete('/profile', [ProfileController::class, 'destroy'])->name('profile.destroy');
});

welcomeだけだったルーティングから増えていますね。
認証関係のミドルウェアを噛ませたルーティング処理にだな。たぶん
ログインしていない状態で
/Dashboard、/profileにアクセスすると、、、 Login Page

ProfileController.phpが勝手に出来ていて、そこにメソッド(functionだけどclass内だからメソッドって言葉でいいのかな?)がありますね。

試しに登録してみようか。「jhon deo」を追加
うまくいきましたね

ログインも成功

まあ、うまくいく状態のものを使っているだけだから当たり前か。
MAMPのDBへの接続もOKですね
Git使ってカッコよくデプロイとかやりたいですが、Git難しくて使えない。
GitHubに草生やすくらいしか出来ないです。ちゃんと勉強したいな。
SIer勤務の時はエクセルバージョン管理だったからな。
ファイルサーバーがわりのSVNとSVNを管理するためのエクセル台帳、、、何やってんだか

ログイン状態で、/profileにアクセスするとちゃんと編集できますね
これは便利
あの面倒なユーザー認証とユーザー情報編集ページがこんなに簡単に作れてしまった。
カスタマイズは出来ないが。
Breezeインストール時に作られた「ProfileController.php』の中に、profileを編集するメソッドが最初から作成されているってわけですね。

    public function update(ProfileUpdateRequest $request): RedirectResponse
    {
        $request->user()->fill($request->validated());

        if ($request->user()->isDirty('email')) {
            $request->user()->email_verified_at = null;
        }

        $request->user()->save();

        return Redirect::route('profile.edit')->with('status', 'profile-updated');
    }

ProfileUpdateRequest型のオブジェクト$requestを引数にして、メソッドチェーンでなんやらかんやらやってるわけね、、、 この辺はオブジェクト指向っぽいな(Javaよさようなら)
読みやすい。でもラムダ式とか苦手だったな。PHPもそれっぽい書き方多いイメージ

ページの準備

Day2で作った結果表示ページはそのまま流用

{{ $firstName }} {{ $lastName }}さんの運勢は
<br/>
{{ $unseiList[0]['name'] }}です。

ログイン前提で、ログインしたら何か入力画面に遷移して、送信するとDBから自分の名前を拾ってきて表示する形にしよう。
これならなんとかギリギリ出来そう。

入力ページが必要だね
ふむふむ、モデルを作っておけばBlade上から情報を引っ張れるんだね
名前に自分の名前を入れたい。
UserモデルとusersテーブルはLaravelをインストールしたときに自動的に作られるから、そのままでオッケー

まずはお試しで。どこかのサイトのコードを流用して。

input.php
<form action="/result" method="post">
    @csrf
    <p>{{\App\Models\User::first()->name}}</p>
    <p><input type="submit" value="送信"></p>
</form>

ルーティングにも追加

Route::get('/input', function () {
    return view('input');
});

/inputにアクセスしてみると、、、
jhon deoの名前が取得できました。よし!

では、今ログインしている人物のデータを取得するにはどうしたらいいのだろうか?

<form action="/result" method="post">
    @csrf
    <p>{{\App\Models\User::where('id', auth()->id())->get()[0]['name']}}</p>
    
    <p><input type="submit" value="送信"></p>
</form>

結構無理矢理ですができました。あんまりフロントでごちゃごちゃ書くのはよろしくないんだよな
今日はとりあえず動けばいいや。

別の人でログインしてもうまくいきました。
Eloquentでwhere句を書いて、条件としてテーブルのid=今ログインしている人のidの条件でデータをとってくるわけですね。
データをdd()で見てみると配列だったので、[0]最初のデータで['name']連想配列のデータを表示させてます。もっといい方法あるのかな?

入力ページと結果ページを登録者限定にする

ミドルウェアでやるんですね
例に倣って間に入れたら動こました。よし!

Route::middleware('auth')->post('/result', 'App\Http\Controllers\UnseiController@index');

Route::middleware('auth')->get('/input', function () {
    return view('input');
});

完成!

Day3 登録者限定おみくじアプリ
LaravelのコントローラーとかEloquentの書き方とか怪しいところがまだまだ多いな。
自信を持って書けるようになりたい。

Day3 Larave omikuji

Discussion