別回答にします。
いろいろ調べてみましたが、Model系を使うとできないようです。
それで、公式にも載せられていますが、Modelless Formという方法をとります。
Formを継承してバリデーションなどを行なう方法です。
ウェブにもサンプルがたくさんありました。
最初の回答のように、user_idとpasswordをバリデーションしてみます。
src/Form/UserForm.php
PHP
1<?php
2namespace App\Form;
3
4use Cake\Form\Form;
5use Cake\Form\Schema;
6use Cake\Validation\Validator;
7
8class UserForm extends Form
9{
10 protected function _buildSchema(Schema $schema)
11 {
12 // フィールドの設定です。
13 return $schema
14 ->addField('user_id', 'string')
15 ->addField('password', ['type' => 'password']);
16 }
17
18 protected function _buildValidator(Validator $validator)
19 {
20 // バリデーションはここに書きます。
21 return $validator
22 ->notEmpty('user_id')
23 ->add('user_id', 'length', [
24 'rule' => ['minLength', 10],
25 'message' => '最低でも10文字のはずです'])
26 ->notEmpty('password');
27 }
28
29 protected function _execute(array $data)
30 {
31 // バリデーションが通った時に実行されます。
32 // ここでは単にtrueを返すだけです。
33 return true;
34 }
35}
src/Controller/UserController.php
PHP
1<?php
2namespace App\Controller;
3
4use App\Controller\AppController;
5use App\Form\UserForm;
6
7class UserController extends AppController
8{
9 public function index()
10 {
11 $user = new UserForm();
12 if($this->request->is('post')) {
13 if ($user->execute($this->request->data)) {
14 // 正常時に何か処理をする
15 $this->Flash->success('正常です');
16 } else {
17 $this->Flash->error('エラーがあります');
18 }
19 }
20 $this->set('user', $user);
21 }
22}
src/Template/index.php
PHP
1<?php
2echo $this->Form->create($user);
3echo $this->Form->input('user_id',['type'=>'text']);
4echo $this->Form->input('password');
5echo $this->Form->button('Submit');
6echo $this->Form->end();
なぜか、user_idだけが、selectだと認識されてしまうので、強制的にtextとしています。
これでエラーも表示されます。
TableやEntityは必ずDBと結びつくように作られていますので、これをDBなしでやろうとするのは、至難の業だと思います。こちらのFormを使う方法に変更されてはいかがでしょうか?
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/03/06 14:21
2016/03/06 14:53