サイトアイコン 上尾市のWEBプログラマーによるブログ

「秘密のLaravel6」の感想・備忘録

kindle本「秘密のLaravel6」のまとめ。

点数

75点

感想

著者はLaravelにとても詳しく、使いこなしていることがよくわかる内容だった。

序盤はかなり勉強になることが多かったが、後半はひたすらサンプルプログラムの説明なので、読み飛ばした。

基本

セマンティックバージョン

Ver.6系からVer.6.0⇒Ver.6.1⇒Ver.6.2のような変更では後方互換性が保たれるようになった。

Laravelには

の3つのリポジトリがあり、それぞれがバージョンを持っている。

composer create-project "laravel/laravel=6.*" MyApp --prefer-distで指定しているバージョンはlaravel/laravelのバージョンである。

日本語化

コントローラ

フォーム画面の初期値

フォーム画面は、以下の2つの値を初期値とする必要がある。

著者は以下のようにセッションを使って実装している。

public function index(User $user)
{
  if ($data = old() ?: session('hoge')) {
    $user->fill($data);
  }
  return view('index.form', compact('user'));
}
// ビューでは<input type="text" name="name" value="{{ $user->name }}">のようにする。

validateメソッドの戻り値

$this->validate()$request->validate()の戻り値は、バリデーションを通過した項目だけを格納した配列である。

著者は以下のようにセッションに保存している。

$data = $request->validate([
  'name' => 'required | max:255'],
  'email' => 'required | max:255 | email |unique:users'],
]);
session(['hogehoge' => $data]);

App/Http/Controllers/Controllerクラス

全コントローラーで共通の処理を書く。
Illuminate\ではなく敢えてApp\にあるという事は、好きなように変更しても良いということ。

Requestクラスのonlyメソッド, allメソッド

ダイナミックプロパティ$request->xxxはルートパラメータを返却しようとする

$request->xxx
のようにダイナミックプロパティを使ってパラメータを取得する場合、パラメータにxxxが存在しない場合はルートパラメータxxxを返却しようとするので注意が必要。
$request->input('xxx')を使った方が無難。

例えば、Route::get('user/{id}', UserController@hoge);のようなルート定義がある中で$request->idとした場合、まず$request->input('id')$request->file('id')を返却しようとし、ない場合は$request->route('id')を返却しようとする。

ビュー

@errorディレクティブ

@error('name')
<p>{{ $message }}</p>
@enderror

$messageには@errorで指定した要素のエラーメッセージが入っている。

パスワード項目

name属性がpasswordの場合はold()にデータが渡されないようになっている。
(通常はパスワードの入力値を復元することはないが)

name属性をxxx_confirmationという名前にすると、バリデーションで確認用項目として扱うことができる。

これらの処理はapp/Exceptions/Handler.phpに書かれている。

バリデーション

必須ではない場合はnullableを指定する

$request->validate(['email' => 'email']);
とすると、入力が空の場合もエラーとなってしまう。
requiredかnullableを必ず指定するべき。

必須系と一般系

バリデーションルールには必須系と一般系がある。

必須系は必ずチェックが行われる。
一般系は項目が存在しない場合や空文字の場合はチェックされない。
ただし、nullの場合はチェックされる。(nullableがある場合はチェックされない)

filledルール

presentルール

モバイルバージョンを終了