グローバル変数をダイナミックに管理
Laravelのバージョンが5になってから、グローバルスコープを持つ変数の設定は、.envとconfig/のディレクトリの設定ファイルで、実用的しかも綺麗にまとまりました。変数の使用も、config('app.url')と、プログラムのでどこでも簡単に取得できます。 また、DBの設定などのデフォルト設定ファイル以外にも、独自の設定ファイルも作成できます。
Laravelのバージョンが5になってから、グローバルスコープを持つ変数の設定は、.envとconfig/のディレクトリの設定ファイルで、実用的しかも綺麗にまとまりました。変数の使用も、config('app.url')と、プログラムのでどこでも簡単に取得できます。 また、DBの設定などのデフォルト設定ファイル以外にも、独自の設定ファイルも作成できます。
配列のDistinctバリデーション 前回の例題とした商品オプションに、オプション名に同じ値が入ることを禁じるバリデーションを追加します。
laravel 5.2 で、バリデーションルールに配列を表す .* というプレースホルダーが使えるようになりました。 例えば、次のような商品オプションのバリデーションを考えます。 入力行の追加UIやドラッグ&ドロップによるソートはjQueryなどで実装することにします(laravel から離れるので解説は省きます) この場合、項目数がいくつになるかわからないので、エレメントの属性名を name="option_name" などとし、配列を返すように作りますよね。
等号を含む日付の最大最小 日付の最大最小 after, before の比較はなぜか等号を含みません。英単語の意味を厳格にプログラム仕様に落とし込んだようですが、実際の使い勝手としては等号を含んでほしかったところです。 これを等号を含むように拡張してしまうと、前回の min, max を拡張したのと違って意味が変わってしまいます。 そこで、start, end を新たに作成して追加してみましょう。
日付の最大最小 after, before では、引数に値(日付)を与えるだけでなく、比較対象の属性の名前を与えることができます。 むしろ具体的な日付を引数にすることのほうがまれでしょう。 このような使い方は、数値型の最大最小 min, max でも使用したいこともありますよね?
バリデーション言語ファイルを編集するときにお気づきと思いますが、Laravel標準バリデーション Max と Min は(他に Size、Between も)調査対象の属性の型でその挙動を変えます。 ここで問題となるのは、文字列型が入力した文字数カウントとの比較になることです。文字列比較の大小によるバリデーションは存在してません。
Laravel 標準の Date バリデーションは、次のときに TRUE を返します。 OR 値がPHPの DateTime クラスのインスタンスである AND 値が strtotime で理解できる文字列である date_parse で年月日を返す checkdate で年月日が妥当である
Laravelは非常にたくさんのファイルを起動時に読み込んでいるので、パフォーマンスの改善は以前から感心があります。最近、管理画面だけでrouteの数が300近いプログラムをインストールするにあたり、重たくなることを予想して、簡単にできる範囲でLaravelでのパフォーマンスの改善を調査してみました。
このブログを開始してから、もうすでに1年以上。RawのSQLを書いてコードに埋め込む日常から、Eloquentを使用したORMのコードへと日常へと移行しています。Eloquentに関しても、ブログを書き始めた頃からは理解が深まり、洗練されたLaravelのコードを書けるようになってきたこの頃です。 1年前に書いた「マスアサインメントで一括取り込み」のトピックで、EloquentのModelのクラスの属性fillableとguardedの話、1年の経験で学んだことを含めてここでもう一度説明します。
ユーザーがアクセスするURLを理解して、必要な関数にマップするのがroutes.phpの基本的な仕事です。 それらのURLには、以下のようにいろいろな形があります。