Laravel 5.3 タイムスタンプのDB項目名の指定

Laravel 5.3に更新して、Eloquentのモデルの設定において嬉しいこと発見しました。 LaravelのEloquentでは、指定のDBテーブルにおいて、作成日時と編集日時に、規定のcreated_atとupdated_atの項目名が使用されているなら、いちいち、

ログイン成功のイベント

ユーザー認証(11)Laravel 5.2 ログインの記録で、ログイン成功後の処理に関して説明しました。 しかし、前回のログインのRemember Meのポストのための調査で、この「Remember Me」がオンになっているときは、先のログイン成功後の処理は、最初のログインのときだけしか実行しないことを見つけました。 つまり、最悪のケース、5年間ログイン成功後の処理は実行されません。同じブラウザを使用してもIPアドレスが変わることがあるし、記録としても不十分となり不都合です。 さて、どう解決したらよいでしょうか?

ログインのRemember Me

Laravel 5.3になって、認証の部分が変りました。それに関していっぱい紹介したいことありますが、それは将来でのポストとして、今回は、「ログインのRemember Me」に関して学んだことを紹介します。

バリデーション (8) 配列をバリデーションする

laravel 5.2 で、バリデーションルールに配列を表す .* というプレースホルダーが使えるようになりました。 例えば、次のような商品オプションのバリデーションを考えます。 入力行の追加UIやドラッグ&ドロップによるソートはjQueryなどで実装することにします(laravel から離れるので解説は省きます) この場合、項目数がいくつになるかわからないので、エレメントの属性名を name=“option_name[{{$id}}]" などとし、配列を返すように作りますよね。

Laravel 5.3 resourceでの名前付きrouteの変更

以前に、Route::resourceの便利さを紹介しました。 routesを使いこなす(1)resourceを使う routesを使いこなす(2)resourceを使いこなす また、名前付きrouteがもたらす便宜さも紹介しました。 routesを使いこなす(4)routeを名付ける しかし、Laravel 5.3のバージョンアップで「ちょっと、それはないよ」みたいな問題が出てきました。

バリデーション (7) エラーメッセージのリプレーサー

等号を含む日付の最大最小 日付の最大最小 after, before の比較はなぜか等号を含みません。英単語の意味を厳格にプログラム仕様に落とし込んだようですが、実際の使い勝手としては等号を含んでほしかったところです。 これを等号を含むように拡張してしまうと、前回の min, max を拡張したのと違って意味が変わってしまいます。 そこで、start, end を新たに作成して追加してみましょう。 'start_date' => 'date|start:today', // 今日を含んでそれ以降 'end_date' => 'date|start:start_date', // 開始日を含んでそれ以降

バリデーション (6) 他の属性の値を参照

日付の最大最小 after, before では、引数に値(日付)を与えるだけでなく、比較対象の属性の名前を与えることができます。 むしろ具体的な日付を引数にすることのほうがまれでしょう。 'date_start' => 'date|before:today', 'date_end' => 'date|after:date_start', このような使い方は、数値型の最大最小 min, max でも使用したいこともありますよね?

バリデーション (5) 最大値と最小値

バリデーション言語ファイルを編集するときにお気づきと思いますが、Laravel標準バリデーション Max と Min は(他に Size、Between も)調査対象の属性の型でその挙動を変えます。 'max' => [ 'numeric' => ':attributeの値が:maxを超えています', 'file' => ':attributeのサイズが:max kBを超えています', 'string' => ':attributeの文字数が:maxを超えています', 'array' => ':attributeの個数が:maxを超えています', ], 'min' => [ 'numeric' => ':attributeの値が:minに足りません', 'file' => ':attributeのサイズが:min kBに足りません', 'string' => ':attributeの文字数が:minに足りません', 'array' => ':attributeの個数が:minに足りません', ], ここで問題となるのは、文字列型が入力した文字数カウントとの比較になることです。文字列比較の大小によるバリデーションは存在してません。

バリデーション (4) DateとDatetime

Laravel 標準の Date バリデーションは、次のときに TRUE を返します。 OR値がPHPの DateTime クラスのインスタンスである AND値が strtotime で理解できる文字列である date_parse で年月日を返す checkdate で年月日が妥当である