誕生日を入力するフォームで、入力された日付に対して以下のチェックを行い、入力エラーがある場合はエラー表示をさせること。2月31日や4月31日など、存在しない日付が入力されていないか未来の日付が入力されていないかTableクラスのvalidationDefaultでチェックをさせたい。実装してみたところ、片方のバリデーション(後に定義したルール)しか効いていませんでした。試しにバリデーションの記述の順番を逆にしてみると、同じく片方のバリデーション(後に定義したルール)しか効かない。後に定義したルールしか適応されないのかもしれないと思い込み、つまずきました。実際に記述したバリデーション(修正前)birthdayの入力データ($value)は「1982-06-18」(yyyy-mm-dd)存在する日付かどうかはcheckdate関数を使用しています。未来の日付かどうかはシステム日付と比較しています。‘無効な日付が入力されています。‘無効な日付が入力されています。原因は「ルール名」が被っていること。上記の‘date’と記載されている部分が、ルール名になります。それぞれのルール名に「date」と、同じ名前を使用してしまっていますね、、。これによって「date」のルールは、後に記述した方になってしまいます。最初のルールの記述は上書きされてしまったということでした、、、、、。同じカラムに対して複数のカスタムバリデーションを設ける場合、ルール名はそれぞれ別名で定義しておかなければならないということを知りました。(そもそもそこがルール名だということを曖昧に理解したまま記述しておりました、、。)以下のように修正し、被らないようにルール名を設定したところ、ちゃんとそれぞれのチェックに対してバリデーションの結果が返されました。‘無効な日付が入力されています。‘無効な日付が入力されています。$validator;バリデーションの確認ここでは試しに、未来でかつ存在しない日付「2018-02-31」を入力してみました。‘無効な日付が入力されています。‘無効な日付が入力されています。]okiku飲食業界からIT業界に転身してきて現在2年目です。PHPの経験がメインとなります。これまで自分がPHPを扱ってきた上で、モヤモヤしてきたことをメインに記事にしていきますのでよろしくお願いいたします。スポンサーリンクシェアするフォローするokiku関連記事CakePHPのvalidationDefaultで重複チェックをする方法CakePHP3のvalidationDefaultで重複チェックを行う方法を説明いたします。保存時のbuildRulesではなくvalidationDefaultで行うことで、入力後の確認画面に遷移する前にチェックができるようになります。記事を読むCakePHPでafterDeleteイベントが呼ばれなかった時の話CakePHP3でafterDeleteイベントが呼ばれないことがあったので調査しました。その際に、原因がdeleteAllだと判明したので、deleteAll時にafterDeleteイベントを呼ぶ方法についても調査しました。記事を読む【PHP】文字数を取得する今回は文字数の取得を行います。strlen関数とmb_strlen関数は文字列を取得する点では共通していますが、返すものが異なります。記事を読むCakePHP3で個別にログファイルを残す方法CakePHP3で、デフォルトで用意されているログ以外のファイルにログを出力する方法を紹介いたします。「error」でも「debug」でもないロガーを「app.php」に追加し、スコープを使って追加したロガーで書き込む処理をするだけです。記事を読むCakePHP3でエレメントの使い方CakePHP3でエレメントの使い方を紹介します。ビューのテンプレートファイルで、ある一部分の要素を使いまわしたい時に便利です。記事を読むCakePHP3のバリデーションで確認用パスワードの一致確認CakePHPで入力されたパスワードと、確認用パスワードが一致しているか、バリデーションで確認する方法を紹介します。コントローラー側でチェック用の関数を使ったりするより、バリデーションでチェックした方が一石二鳥以上だと思います。記事を読むCakePHP3で作成したシェルをcron設定する(バッチ処理)CakePHPで作成したスクリプトの実行コマンドをcronに設定することで、バッチ処理を実現する方法です。以前、CakePHPでシェルを作成する方法を記事にしたので、cronに時間とコマンドの設定方法をメインに説明していきます。記事を読むEC-CUBE3でテーブルにカラムを追加EC-CUBE3のプラグインでは、基本的に既存テーブルに対してカラムを追加するような拡張は推奨されていません。新規にテーブルを作るよりも、既存テーブルにカラムを追加した方が効率的なこともあるので、そんな時のためにやり方を紹介しています。記事を読むCakePHP3でシェルを作成し、コンソールから実行する方法CakePHP3でシェルを作成し、コンソールから実行する手順を説明いたします。シェルを作ることができれば、cronジョブを使用してバッチ処理を実現するなど、ウェブブラウザからのアクセスを必要としない処理に使うことができます。記事を読むCakePHP3で検索結果をページネーションCakePHP3で簡単にできるページネーションを紹介します。今回は1ページあたりの件数とソートをいじって、検索結果をページ分けします。その上で、前後のページへのリンクやナンバリングをしたリンクを表示させます。