回答編集履歴

4

コメントの位置を変える

2017/02/03 23:06

投稿

popobot
popobot

スコア6586

test CHANGED
@@ -29,6 +29,12 @@
29
29
 
30
30
 
31
31
  正直元のコードは内容がCakephp2の書き方だったり、そもそも文法も変だったりするので、基本的なところが理解できていいないと感じました。もっと基礎的な部分からじっくり勉強して理解していったほうがいいと思いますよ。
32
+
33
+
34
+
35
+ 以下のコードの内容を軽く解説しておくと、バリデーションの定義は3系では配列ではなくオブジェクトに追加します。コントローラ側でnewEntity()にデータを渡すと自動的にバリデートが動いて、エラーがあればentityのerrors()で取得できます。
36
+
37
+ エラーをテンプレート側で表示したい場合、Formヘルパーのcreateにentityを渡してあげれば、対応するinputに自動的にエラーメッセージが表示されます。Cakephpでは、規約に従えば自動的に処理が実行されるものが多くあるので、よく理解することが大切だと思います。
32
38
 
33
39
 
34
40
 
@@ -177,9 +183,3 @@
177
183
  <?= $this->Form->end() ?>
178
184
 
179
185
  ```
180
-
181
-
182
-
183
- 軽く解説しておくと、バリデーションの定義は3系では配列ではなくオブジェクトに追加します。コントローラ側でnewEntity()にデータを渡すと自動的にバリデートが動いて、エラーがあればentityのerrors()で取得できます。
184
-
185
- エラーをテンプレート側で表示したい場合、Formヘルパーのcreateにentityを渡してあげれば、対応するinputに自動的にエラーメッセージが表示されます。Cakephpでは、規約に従えば自動的に処理が実行されるものが多くあるので、よく理解することが大切だと思います。

3

補足

2017/02/03 23:06

投稿

popobot
popobot

スコア6586

test CHANGED
@@ -177,3 +177,9 @@
177
177
  <?= $this->Form->end() ?>
178
178
 
179
179
  ```
180
+
181
+
182
+
183
+ 軽く解説しておくと、バリデーションの定義は3系では配列ではなくオブジェクトに追加します。コントローラ側でnewEntity()にデータを渡すと自動的にバリデートが動いて、エラーがあればentityのerrors()で取得できます。
184
+
185
+ エラーをテンプレート側で表示したい場合、Formヘルパーのcreateにentityを渡してあげれば、対応するinputに自動的にエラーメッセージが表示されます。Cakephpでは、規約に従えば自動的に処理が実行されるものが多くあるので、よく理解することが大切だと思います。

2

ちょいバグがあったので修正

2017/02/03 23:05

投稿

popobot
popobot

スコア6586

test CHANGED
@@ -146,9 +146,13 @@
146
146
 
147
147
  }
148
148
 
149
+ } else {
150
+
149
- $this->set(compact('entity'));
151
+ $entity = $this->Tests->newEntity();
150
152
 
151
153
  }
154
+
155
+ $this->set(compact('entity'));
152
156
 
153
157
  }
154
158
 

1

追記

2017/02/03 06:52

投稿

popobot
popobot

スコア6586

test CHANGED
@@ -19,3 +19,157 @@
19
19
  ]
20
20
 
21
21
  ```
22
+
23
+
24
+
25
+ **(追記)**
26
+
27
+ シンプルなバリデーションの例を書いたので参考にしてください。
28
+
29
+
30
+
31
+ 正直元のコードは内容がCakephp2の書き方だったり、そもそも文法も変だったりするので、基本的なところが理解できていいないと感じました。もっと基礎的な部分からじっくり勉強して理解していったほうがいいと思いますよ。
32
+
33
+
34
+
35
+ TestsTable.php
36
+
37
+ ```php
38
+
39
+ <?php
40
+
41
+ namespace App\Model\Table;
42
+
43
+
44
+
45
+ use Cake\ORM\Table;
46
+
47
+ use Cake\Validation\Validator;
48
+
49
+
50
+
51
+ class TestsTable extends Table{
52
+
53
+
54
+
55
+ public function validationDefault(Validator $validator) {
56
+
57
+ $validator
58
+
59
+ ->add('inputpass', [
60
+
61
+ 'length' => [
62
+
63
+ 'rule' => ['minLength', 6],
64
+
65
+ 'message' => '6文字以上で入力してください'
66
+
67
+ ]
68
+
69
+ ])
70
+
71
+ ->add('inputpass2', [
72
+
73
+ 'length' => [
74
+
75
+ 'rule' => ['minLength', 6],
76
+
77
+ 'message' => '6文字以上で入力してください'
78
+
79
+ ]
80
+
81
+ ])
82
+
83
+ ->add('inputpass2', [
84
+
85
+ 'sameAs' => [
86
+
87
+ 'rule' => [$this, 'sameAs'],
88
+
89
+ 'message' => 'パスワードが一致しません'
90
+
91
+ ]
92
+
93
+ ]);
94
+
95
+ return $validator;
96
+
97
+ }
98
+
99
+
100
+
101
+ public function sameAs($value, $context) {
102
+
103
+ if($value == $context['data']['inputpass']) {
104
+
105
+ return true;
106
+
107
+ }
108
+
109
+ return false;
110
+
111
+ }
112
+
113
+ }
114
+
115
+ ```
116
+
117
+
118
+
119
+ TestsController.php
120
+
121
+ ```php
122
+
123
+ <?php
124
+
125
+ namespace App\Controller;
126
+
127
+
128
+
129
+ class TestsController extends AppController {
130
+
131
+
132
+
133
+ public function test1() {
134
+
135
+ if($this->request->isPost()) {
136
+
137
+ $entity = $this->Tests->newEntity($this->request->data);
138
+
139
+ if($entity->errors()) {
140
+
141
+ debug('error');
142
+
143
+ } else {
144
+
145
+ debug('success');
146
+
147
+ }
148
+
149
+ $this->set(compact('entity'));
150
+
151
+ }
152
+
153
+ }
154
+
155
+ }
156
+
157
+ ```
158
+
159
+
160
+
161
+ test1.ctp
162
+
163
+ ```php
164
+
165
+ <?= $this->Form->create($entity) ?>
166
+
167
+ <?= $this->Form->input('inputpass') ?>
168
+
169
+ <?= $this->Form->input('inputpass2') ?>
170
+
171
+ <?= $this->Form->submit() ?>
172
+
173
+ <?= $this->Form->end() ?>
174
+
175
+ ```