Laravelをはじめました。
はじめるまでが長い
私はAIを家庭教師にPHP学習を進めてきました。次々提案してくれるので、ありがたいのですが、PHP学習の終わりが見えませんでした。
来月から新たにメンターの先生に入ってもらうことになり、その先生に進捗(CRUDはもうできた)を伝えたら、Laravelに入っていいよと言われたので、仕事が落ち着いたタイミングではじめました。
なんか今までと違う
今まで職場の研修でPythonなど触ってきましたが、スタートが違いました。helloworldではない――フォルダが分けられていて、そこで役目があって…そういうものかという受け入れるのに時間がかかりました。
その過程で「実際に触ると混乱するポイント」がいくつかあったので整理します。
URLはどこで決まっているのか
答えは Route でした。
ファイル routes/web.php
例
Route::get('/post', function () {
return view('post_form');
});
Route::post('/post', [PostController::class, 'store']);
ここで /post というURLを定義しています。
Requestってなに?
ここがかなり疑問でした。
public function store(Request $request)
この $request は何か。
結論はブラウザから送られてきたデータの箱です。
例えばフォームが
<input name="title">
<textarea name="body"></textarea>
だった場合、ブラウザは次のようなデータを送ります。
title = 入力したタイトル
body = 入力した本文
Controllerでは
$request->title
$request->body
で取り出せます。
Viewにデータを返す書き方
return view('post_result', [
'title' => $title,
'body' => $body
]);
この書き方の意味は Viewで使う名前 → Controllerの変数に変換するということです。
つまり 'title' => $title については、
Viewでは $title として使えます。
バリデーション
$request->validate([
'title' => 'required',
'body' => 'required',
]);
nameがtitle,bodyの入力欄が空の場合、エラーになります。
@if ($errors->any())
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
@endif
以上がエラー表示。デフォルトの英文が出てくる。
バリデーションの文言変更
Controllerでエラーメッセージを第二引数で指定できます。
$request->validate(
[
'title' => 'required',
'body' => 'required',
],
[
'title.required' => 'タイトルは必須です',
'body.required' => '本文は必須です',
]
);
'ほにゃらら.required'はtitleフィールドのrequiredエラーということで、フィールド名.ルール名という形になるそうです。
亜種
$request->validate(
[
'title' => 'required|max:100',
],
[
'title.required' => 'タイトルは必須です',
'title.max' => 'タイトルは100文字以内で入力してください',
]
);
よって、文字数確認などもこの形式。
え、もしかしてこの手の構文?結構多いんかな。震え