バリデーションをマスターする (4/6)
作成:2015-10-17 15:31
更新:2015-10-17 15:31
更新:2015-10-17 15:31
■エンティティをフォームに渡さないやり方
エンティティをフォームヘルパーに渡すことで、発生したメッセージは自動的に表示されるようになります。では、エンティティを渡さなかった場合はどうなるのでしょう? この場合は、エラーメッセージは表示されなくなります。
が、ちょっと手を加えてやることで、エラー時に簡単なメッセージを表示させることは可能になります。やってみましょう。
コントローラー側のアクションと、テンプレートを下のリスト欄のように修正してください。そしてページをリロードし、何も入力しないで送信すると、「please check entered values...」とメッセージが表示されます。1つ1つのフィールドにエラーメッセージは表示されませんが、再入力を促すメッセージぐらいならこれで十分でしょう。
ここでは、エラーが発生していたらエラーメッセージを追加するようにしています。それを行っているのが以下の部分です。
エンティティの「errors」をチェックしています。エラーが発生していたら、これはtrueとなり、その後の$this->Flash->errorが実行されます。Flashはコントローラーに組み込まれているコンポーネントで、セッションに保管されるメッセージ類を管理します。errorメソッドは、エラーメッセージを設定する働きをします。
これで設定されたエラーメッセージは、CakePHP3のレイアウトを利用しているなら自動的にタイトル下に表示されます。ごく簡単なエラーメッセージを表示させるなら、これで十分ですね!
が、ちょっと手を加えてやることで、エラー時に簡単なメッセージを表示させることは可能になります。やってみましょう。
コントローラー側のアクションと、テンプレートを下のリスト欄のように修正してください。そしてページをリロードし、何も入力しないで送信すると、「please check entered values...」とメッセージが表示されます。1つ1つのフィールドにエラーメッセージは表示されませんが、再入力を促すメッセージぐらいならこれで十分でしょう。
ここでは、エラーが発生していたらエラーメッセージを追加するようにしています。それを行っているのが以下の部分です。
if ($person->errors()){
$this->Flash->error('please check entered values...');
}エンティティの「errors」をチェックしています。エラーが発生していたら、これはtrueとなり、その後の$this->Flash->errorが実行されます。Flashはコントローラーに組み込まれているコンポーネントで、セッションに保管されるメッセージ類を管理します。errorメソッドは、エラーメッセージを設定する働きをします。
これで設定されたエラーメッセージは、CakePHP3のレイアウトを利用しているなら自動的にタイトル下に表示されます。ごく簡単なエラーメッセージを表示させるなら、これで十分ですね!
(by. SYODA-Tuyano.)
※プログラムリストが表示されない場合
AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。
●プログラム・リスト●
※コントローラー側のアクションメソッド
public function add()
{
$person = $this->Persons->newEntity();
$this->set('person', $person);
if ($this->request->is('post')) {
$person = $this->Persons->patchEntity($person, $this->request->data);
if ($this->Persons->save($person)) {
return $this->redirect(['action' => 'index']);
}
if ($person->errors()){
$this->Flash->error('please check entered values...');
}
}
}
※テンプレート
<div>
<h3>Add Person</h3>
<?= $this->Form->create() ?>
<fieldset>
<?php
echo $this->Form->input('name');
echo $this->Form->input('age');
echo $this->Form->input('mail');
?>
</fieldset>
<?= $this->Form->button('Submit') ?>
<?= $this->Form->end() ?>
</div>
※関連コンテンツ
「初心者のためのCakePHP3 プログラミング入門」に戻る