質問編集履歴

1

CakeDC/Usersについて

2017/09/07 22:11

投稿

singlestroke
singlestroke

スコア68

test CHANGED
@@ -1 +1 @@
1
- Cakephp3でhasManyアソシエーションの保存ができな
1
+ Cakephp3で会員サイトを作りた
test CHANGED
@@ -1,274 +1,16 @@
1
1
  ###前提・実現したいこと
2
2
 
3
- CakePHP3で、ログイン後に回答できる○☓クイズのシステム作ってます
3
+ CakePHP3で、ユーザー管理、認証などたい
4
-
5
- クイズ
6
-
7
- 回答時に回答履歴をsaveメソッドでDBに登録することができません。
8
4
 
9
5
 
10
6
 
11
7
  ###発生している問題
12
8
 
9
+ CakeDC/Usersプラグインが機能的に良さそうということは分かりました。
13
10
 
11
+ こういったプラグインは業務などでもよく使用されているものなのでしょうか。
14
12
 
15
- 1.設問ページにてHtmlHelperでボタンがうまく表現できない。
16
-
17
- 2.設問ページで選択肢を選択、回答ページに遷移した際にDB(MySQL)にデータ登録することができない。
18
-
19
-
20
-
21
- ###該当のソースコード
22
-
23
- Multiples(問題)→Answers(回答履歴)はhasManyで設定。
24
-
25
- MultiplesTable.php
26
-
27
- ```php
28
-
29
- public function initialize(array $config)
30
-
31
- {
32
-
33
- parent::initialize($config);
34
-
35
-
36
-
37
- $this->setTable('multiples');
38
-
39
- $this->setDisplayField('id');
40
-
41
- $this->setPrimaryKey('id');
42
-
43
-
44
-
45
- $this->hasMany('Answers', [
46
-
47
- 'foreignKey' => 'q_id'
48
-
49
- ]);
50
-
51
- }
52
-
53
- ```
54
-
55
-
56
-
57
- AnswersTable.php
58
-
59
- ```php
60
-
61
- public function initialize(array $config)
62
-
63
- {
64
-
65
- parent::initialize($config);
66
-
67
-
68
-
69
- $this->setTable('answers');
70
-
71
- $this->setDisplayField('id');
72
-
73
- $this->setPrimaryKey('id');
74
-
75
-
76
-
77
- $this->addBehavior('Timestamp');
78
-
79
-
80
-
81
- $this->belongsTo('Multiples', [
82
-
83
- 'foreignKey' => 'q_id',
84
-
85
- 'joinType' => 'INNER'
86
-
87
- ]);
88
-
89
- $this->belongsTo('Users', [
90
-
91
- 'foreignKey' => 'user_id',
92
-
93
- 'joinType' => 'INNER'
94
-
95
- ]);
96
-
97
- }
98
-
99
- (中略)
100
-
101
- public function buildRules(RulesChecker $rules)
102
-
103
- {
104
-
105
- $rules->add($rules->existsIn(['q_id'], 'Multiples'));
106
-
107
- $rules->add($rules->existsIn(['user_id'], 'Users'));
108
-
109
-
110
-
111
- return $rules;
112
-
113
- }
114
-
115
- ```
116
-
117
-
118
-
119
- 設問ページのアクションメソッド
120
-
121
- MultiplesController.php
122
-
123
- ```php
124
-
125
- public function view($id = null)
126
-
127
- {
128
-
129
- if (empty($id)) {
130
-
131
- throw new NotFoundException;
132
-
133
- }
134
-
135
- $multiple = $this->Multiples->get($id, [
136
-
137
- 'contain' => []
138
-
139
- ]);
140
-
141
-
142
-
143
- if ($this->request->is(['patch', 'post', 'put'])) {
144
-
145
- return $this->redirect(['action' => 'result']);
146
-
147
- }
148
-
149
-
150
-
151
- $this->set('multiple', $multiple);
152
-
153
- $this->set('_serialize', ['multiple']);
154
-
155
- }
156
-
157
- ```
158
-
159
- 設問ページのビュー
160
-
161
- ・ここで<button>タグで「○」「☓」と表示されたボタンを設置したい。
162
-
163
- view.ctp
164
-
165
- ```php
166
-
167
- <?= $this->Form->create($multiple, ['url' => ['action' => 'result']])?>
168
-
169
- <?= $this->Form->button(__('○'), [
170
-
171
- 'value' => '0',
172
-
173
- 'name' => "answers.0.ans",
174
-
175
- 'class' => "right"
176
-
177
- ]) ?>
178
-
179
- <?= $this->Form->button(__('☓'), [
180
-
181
- 'value' => '1',
182
-
183
- 'name' => "answers.ans",
184
-
185
- 'class' => "wrong"
186
-
187
- ]) ?>
188
-
189
- <?= $this->Form->end() ?>
190
-
191
- ```
192
-
193
- 回答後ページのアクションメソッド
194
-
195
- ※ここに遷移した際に回答履歴としてDBに登録したい。
196
-
197
- MultiplesController.php
198
-
199
- ```php
200
-
201
- public function result($id = null)
202
-
203
- {
204
-
205
- if (empty($id)) {
206
-
207
- throw new NotFoundException(__('問題が見つかりません'));
208
-
209
- }
210
-
211
-
212
-
213
- if ($this->request->is(['patch', 'post', 'put'])) {
214
-
215
-
216
-
217
- $data = $this->request->data;
218
-
219
- $multiples = TableRegistry::get('Multiples');
220
-
221
- $entity = $multiples->newEntity($data, [
222
-
223
- 'validate' => false,
224
-
225
- 'associated' => 'Answers'
226
-
227
- ]);
228
-
229
- // 登録処理
230
-
231
- if ($multiples->save($entity)) {
232
-
233
- $this->Flash->success(__('saved !'));
234
-
235
- } else {
236
-
237
- $this->Flash->error(__('Unable to add results !'));
238
-
239
- }
240
-
241
-
242
-
243
- }
244
-
245
-
246
-
247
- // 回答表示後に過去の回答履歴表示用
248
-
249
- $multiple = $this->Multiples->get($id, [
250
-
251
- 'contain' => ['Answers']
252
-
253
- ]);
254
-
255
-
256
-
257
- $this->set('multiple', $multiple);
258
-
259
- $this->set('_serialize', ['multiple']);
260
-
261
- }
262
-
263
- ```
264
-
265
-
266
-
267
- ###試したこと
268
-
269
- 回答時にはMultiplesテーブルへの更新はなく、Answersテーブルに回答履歴が追加されていき、ユーザーのログイン後マイページで回答履歴を表示されるという流れを考えております。
270
-
271
- この回答時のhasManyテーブルの保存がどうしても解決しませんでした
13
+ CakePHP勉強を開始してないので感覚が分かりません。
272
14
 
273
15
 
274
16