はじめに
/events?areas=1,2,3
のような URL で検索などの処理を行う際に、良い感じにバリデーションする方法を調べた。
※なるべく自前で各値が DB の値と一致するかを検証したくないよね、というお話。
TL;DR
prepareForValidation
内でデータを変更すると幸せになれるgetValidatorInstance
でもいけるかも(試してない)
/events?areas=1,2,3
のような URL で検索などの処理を行う際に、良い感じにバリデーションする方法を調べた。
※なるべく自前で各値が DB の値と一致するかを検証したくないよね、というお話。
prepareForValidation
内でデータを変更すると幸せになれるgetValidatorInstance
でもいけるかも(試してない)Laravelで「開始日時」と「終了日時」を登録する際に、日付と時刻の入力欄がそれぞれに用意されているようなケースで、「開始日時 < 終了日時」であることをバリデーションする方法。
追記: こっちのやり方使った方が良いかも。
Laravel でコンマ区切りのフォームデータを良い感じにバリデーションする
Laravel で有効期限付きの一次的な URL を生成してメールで送信する方法について調べた。
基本的には Laravel5.6で署名付きURL(時間制限付き)の実装が簡単に出来るようになったので試した - Qiita の内容通りで、+α として実際にメール送信(承諾/拒否)まで行っている。
temporarySignedRoute
で URL 生成now()->addXXXX()
で設定hasValidSignature
で URL の検証Laravel で (a OR b) AND (c OR d)
のように複合的な AND/OR 検索する方法について整理した。
where(fucntion($query))
を使う$query->where
や $query->orWhere
を使うLaravel の中間テーブルを使った多対多(belongsToMany
)の関係で、中間テーブルのカラムでソートする方法を調べた。
イメージとしては「ユーザー」と「サークル」があって、「ユーザー」は複数の「サークル」に所属可能、「サークル」には複数の「ユーザー」が所属。サークルへの加入時期(created_at
)でソートする、など。
withPivot
と orderBy
を組み合わせるwithPivot('created_at AS joined_at')
のように別名を付けると分かりやすいPHP, Laravel で null
の可能性があるケースでの便利なメソッドや演算子について調べたので忘れないようにメモ。
※Ruby の Safe Navigation Operator (ぼっち演算子) hoge&.name
とかのようなもの。
optional()
: optional($hoge)->name
とすると、$hoge = null
の時は null
が返ってくる??
: $a = $b ?? 'null だよ'
とすると、$b != null
の時は $b
、$b == null
の時は ??
の後の値が設定されるoptional($a)->name ?? '未入力'
のように組み合せて使うと便利Laravel で View 用のロジックを分離できるライブラリ robclancy/presenter の使い方について整理した。
composer require robclancy/presenter
でインストールGit を使った開発をしていて composer.lock
の content-hash
でコンフリクトが発生した時の解決方法のメモ。
composer.lock
の content-hash
のコンフリクトは以下で解決できるcontent-hash
のどちらかを残すcomposer update --lock
を実行PHP ファイルを Git リポジトリに登録(commit)する時に、PHP-CS-Fixer で自動整形を必須にする方法を調べた。
.git/hooks/pre-commit
でも実現できるが、できればチームメンバー内で共有したい(git clone
(してゴニョゴニョ)するだけで使えるようにしたい)ので、もう少し突っ込んで調べてみた。
husky
+ lint-staged
+ php-cs-fixer
でコミット時の自動整形を実現可能husky
を使うと、package.json
で クライアントサイドの Git hooks(pre-commit など)を利用できる
lint-staged
を使うと、ファイル種別ごとにコマンドを実行できるhusky
+ lint-staged
で、*.php
の commit 時に php-cs-fixer
を実行する