状況が、あまり把握できていませんが、ModelのValidatorにnotEmptyの条件を追加することで、FormヘルパーによるInput生成の際に、HTMLのrequired属性が設定されてしまのが原因のように思います
required属性が設定されると、ブラウザ側で未入力のチェックが行われ、自分の環境(Chrome)では「このフィールドを入力してください」とポップアップのようなメッセージが表示されます
このrequired属性が自動で設定されてしまうのは、以下のようにFormヘルパーのinputメソッドのオプションで、requiredをFalse設定することにより回避できます
このとき、対象フィールドは未入力のままPOSTされますので、、サーバ側のバリデーションで未入力を検出し、設定したメッセージを表示することが可能になります
CakePHP
1 <?= $this->Form->input('password',['required' => false,'label' => 'パスワード','placeholder' => 'パスワード']); ?>
【追記2016/07/01】
自分の環境は、テーブルを作成してcontroller,model,templateをbakeしたのち、バリデーションの条件のみを追加していますが、問題なくエラーメッセージが表示されます
自分の環境のコード(といってもほとんどbakeしたままですが)を添付しますので、ご自身のコードとの差分等をご確認ください
CakePHP
1 コントローラー
2 /**
3 * Samples Controller
4 *
5 * @property \App\Model\Table\SamplesTable $Samples
6 */
7 class SamplesController extends AppController
8 {
9
10 /**
11 * Add method
12 *
13 * @return \Cake\Network\Response|void Redirects on successful add, renders view otherwise.
14 */
15 public function add()
16 {
17 $sample = $this->Samples->newEntity();
18 if ($this->request->is('post')) {
19 $sample = $this->Samples->patchEntity($sample, $this->request->data);
20 if ($this->Samples->save($sample)) {
21 $this->Flash->success(__('The sample has been saved.'));
22 return $this->redirect(['action' => 'index']);
23 } else {
24 $this->Flash->error(__('The sample could not be saved. Please, try again.'));
25 }
26 }
27 $this->set(compact('sample'));
28 $this->set('_serialize', ['sample']);
29 }
30 }
31
32 モデル
33 /**
34 * Samples Model
35 *
36 */
37 class SamplesTable extends Table
38 {
39
40 /**
41 * Initialize method
42 *
43 * @param array $config The configuration for the Table.
44 * @return void
45 */
46 public function initialize(array $config)
47 {
48 parent::initialize($config);
49
50 $this->table('samples');
51 $this->displayField('name');
52 $this->primaryKey('id');
53
54 $this->addBehavior('Timestamp');
55 }
56
57 /**
58 * Default validation rules.
59 *
60 * @param \Cake\Validation\Validator $validator Validator instance.
61 * @return \Cake\Validation\Validator
62 */
63 public function validationDefault(Validator $validator)
64 {
65 $validator
66 ->integer('id')
67 ->allowEmpty('id', 'create');
68 $validator
69 ->notEmpty('name', '名前を入力してください')
70 ->notEmpty('comment','コメントを入力してください')
71 ->add('comment',['length'=> ['rule' => ['minLength', 8],'message' => 'コメントは8文字以上で設定してください']]);
72
73 return $validator;
74 }
75 }
76
77 テンプレート(addのみ)
78 <nav class="large-3 medium-4 columns" id="actions-sidebar">
79 <ul class="side-nav">
80 <li class="heading"><?= __('Actions') ?></li>
81 <li><?= $this->Html->link(__('List Samples'), ['action' => 'index']) ?></li>
82 </ul>
83 </nav>
84 <div class="samples form large-9 medium-8 columns content">
85 <?= $this->Form->create($sample) ?>
86 <fieldset>
87 <legend><?= __('Add Sample') ?></legend>
88 <?php
89 echo $this->Form->input('name',['required' => false, 'label' => '名前','placeholder' => '名前']);
90 echo $this->Form->input('comment',['required' => false, 'label' => 'コメント', 'placeholder' => 'コメント']);
91 ?>
92 </fieldset>
93 <?= $this->Form->button(__('Submit')) ?>
94 <?= $this->Form->end() ?>
95 </div>
【追記】
画面のHTMLソース
HTML
1 <div class="samples form large-9 medium-8 columns content">
2 <form method="post" accept-charset="utf-8" action="/cakephp30/samples/add">
3 <div style="display:none;">
4 <input type="hidden" name="_method" value="POST"/>
5 </div>
6 <fieldset>
7 <legend>Add Sample</legend>
8 <div class="input text required">
9 <label for="name">Name</label>
10 <input type="text" name="name" required="required" maxlength="45" id="name"/>
11 </div>
12 <div class="input text">
13 <label for="comment">Comment</label>
14 <input type="text" name="comment" maxlength="45" id="comment"/>
15 </div>
16 </fieldset>
17 <button type="submit">Submit</button>
18 </form>
19 </div>