質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

バリデーション

Validationとは特定の入力データが、求められた条件に当てまっているかをチェックするために使われます。

Q&A

解決済

1回答

14487閲覧

cakephp 3 validationでエラーメッセージを表示する方法を教えてください

Franco

総合スコア13

CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

バリデーション

Validationとは特定の入力データが、求められた条件に当てまっているかをチェックするために使われます。

0グッド

1クリップ

投稿2016/02/07 12:43

cakephp3を使いWebアプリケーションを作っています。

新規でアカウント登録を行う(signupページより入力されたデータをusersテーブルにInsert)ときのvalidationで項目のチェックをしていますが、Modelで書いているUsersTable.phpのvalidationのmessageが表示されません。

ちなみにデータ登録の動きは問題ありませんので、単純にエラーメッセージが表示されずに、エラーが起きた場合には全て**Unable to add user.**と表示されます。

アドバイスをどうぞ宜しくお願いします。

■環境
MAMPで構築
php: 5.5.10
Database: Mysql

■ファイル
View: signup.php
Controller: Userscontroller.php
Model: (Table)UsersTable.php / (Entity)User.php
※(Entity)User.phpではパスワードをハッシュ化

signup.php

<?= $this->Form->create($user) ?> <fieldset> <?php echo $this->Form->text( 'name', array( 'maxlength' => '10', 'type' => 'text', 'placeholder'=>'Name', 'required' =>'false')); echo $this->Form->text( 'email', array( 'maxlength' => '255', 'type' => 'email', 'placeholder'=>'Email Address', 'required' =>'false')); echo $this->Form->text( 'password', array( 'maxlength' => '20', 'type' => 'password', 'placeholder'=>'Password', 'required' =>'false')); echo $this->Form->text( 'confirm_password', array( 'maxlength' => '20', 'type' => 'password', 'placeholder'=>'Confirm Password', 'required' =>'false')); ?> </fieldset> <?= $this->Form->button( 'Register', array('name'=>'register', 'class'=>'btn btn-info btn-block')) ?> <?= $this->Form->end() ?>

Userscontroller.php

<?php namespace App\Controller; use App\Controller\AppController; use Cake\Event\Event; class UsersController extends AppController { public function signup() { $this->viewBuilder()->layout('default'); $user = $this->Users->newEntity(); if ($this->request->is('post')) { $user = $this->Users->patchEntity($user, $this->request->data); if ($this->Users->save($user)) { $this->Flash->success(__('The user has been saved. Please check your email, then activate your account.')); return $this->redirect(['action' => 'registered']); } $this->Flash->error(__('Unable to add user.')); } $this->set('user', $user); } } **(Table)UsersTable.php** <?php namespace App\Model\Table; use Cake\ORM\Table; use Cake\Validation\Validator; class UsersTable extends Table { public function validationDefault(Validator $validator) { $validator ->requirePresence('name') ->notEmpty('name', 'An Name is required') ->add('name', [ 'maxLen' => [ 'rule' => ['maxLength', 10], 'message' => 'Name is less than 10 charactors.', ] ]) ->requirePresence('email') ->add('email', 'validFormat',['rule' => 'email'] ) ->notEmpty('email', 'A email is required') ->requirePresence('password') ->add('password', [ 'comWith' => [ 'rule' => ['compareWith', 'confirm_password'], 'message' => 'The password is incorrect and for confirm_password.', ], 'minLen' => [ 'rule' => ['minLength', 8], 'message' => 'At least eight characters.', ] ]) ->notEmpty('password', 'A password is required') ->requirePresence('confirm_password') ->add('confirm_password', [ // Whether same or for confirmation_password // 'minLen' => [ // 'rule' => ['minLength', 8], // 'message' => 'At least eight characters.', // ] ]) ->notEmpty('confirm_password', 'A confirm_password is required'); return $validator; } }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

$this->Form->textで出力する場合は、バリデーションのメッセージを表示するために$this->Form->errorが必要です。
$this->Form->textは自分でカスタマイズしやすいように用意されています。

一方で、$this->Form->inputで出力する場合は、エラーメッセージは自動で出力してくれます。
基本的には$this->Form->inputを使うと楽です。

(それとふと目に入ってしまったのですが、バリデーションのルールの中で、'name'のメッセージがcharactorsとなっています。charactersですね。)

投稿2016/02/07 16:19

coba-coba

総合スコア1409

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Franco

2016/02/08 10:10

ありがとうござました!! まさにおっしゃる通りで感謝感激です。 また宜しくお願いします!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問