はじめに
/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 を実行する