CakepPHP3でフォームにループで組んだ情報を一度に書き込んでいきたいと思います。
現在、一つのレコードに関しては、実装済なのですが、いろいろと不具合が生じてきました。
- src\Model\Entity\Quiz.phpにてclass Bookmark extends Entity{}と定義してるのに1つのレコードの挿入はできる(valitationは働く。情報も挿入される)
- src\Model\Entity\Quiz.phpにてclass Quiz extends Entity{}と直すと、一つのレコードを挿入するctpファイルのコードの方ではnullのレコードが挿入されてしまう。(valitationは一応効くが、正しい情報を入力しても空レコードになる。)
- atomにてプロジェクト内を検索して、「ookmark」と検索するも、src\Model\Entity\Quiz.phpとsrc\Template\Pages\home.ctpに書いてあるBookmarkしか見当たらない。※これがとにかく気持ち悪い
- 複数レコードの際のフォームは、フォームヘルパーにてname属性を配列にしてあげるも、var_dumpすると、POSTは表示されるも、entitiesの方は入力された情報が見当たらない。
追記
0. 別のプロジェクトにbakeコマンドで適当にモデルを作り、そのモデルにあった、以下の名前空間の階層化のコードをQuizsTable.phpに挿入して、bookmarkをquizに変更したら空フィールド現象はなくなりました。
use App\Model\Entity\Quiz;
use Cake\ORM\Query;
use Cake\ORM\RulesChecker;
use Cake\ORM\Table;
use Cake\Validation\Validator;
0. 複数データの挿入のみの問題になりました。
0. request->data()の引数に'Quizs'を追記したところ、
- Warning (4096): Argument 1 passed to Cake\ORM\Table::newEntities() must be of the type array, null given, called in /var/www/html/cakephp/project_name/src/Controller/QuizsController.php on line 66 and defined [CORE/src/ORM/Table.php, line 2053]
- Warning (4096): Argument 1 passed to Cake\ORM\Marshaller::many() must be of the type array, null given, called in /var/www/html/cakephp/project_name/vendor/cakephp/cakephp/src/ORM/Table.php on line 2059 and defined [CORE/src/ORM/Marshaller.php, line 286]
- Warning (2): Invalid argument supplied for foreach() [CORE/src/ORM/Marshaller.php, line 289]
となりました。
追記
http://stackoverflow.com/questions/32912941/cakephp-3-x-saving-multiple-entities-newentities
のサイトより
0. echo $this->Form->input($i.'.question',['label' => '質問','placeholder' => '質問文']);
と変えてみたら、valitation出ました。
formヘルパーの文法的に
php
1echo $this->Form->input('0.column_name', /* ... */); 2echo $this->Form->input('1.column_name', /* ... */); 3
ですね。
php
1addition5.ctp 2<?php 3 echo $this->Form->create('Quizs',["class" => "quizform"]); 4 for($i = 1; $i < 6;$i++){ 5 echo '<h2 class="add5">登録クイズ('.$i.'/5)</h2>'; 6 echo $this->Form->hidden('user_id',['value' => h($this->request->session()->read('Auth.User.id'))]); 7 echo $this->Form->input('question['.$i.']',['label' => '質問','placeholder' => '質問文']); 8 echo $this->Form->error('Model.question'); 9 echo $this->Form->input('answer['.$i.']',['label' => '答え','placeholder' => '答え']); 10 echo $this->Form->error('Model.answer'); 11 } 12 echo $this->Form->button('登録',["class" => "ok"]); 13 echo $this->Form->end(); 14 ?> 15
コントローラの方は
php
1 public function addition5(){ 2 $this->ViewBuilder()->layout('hoge'); 3 $quizs = TableRegistry::get('Quizs'); 4 $entities = $quizs->newEntities($this->request->data('Quizs'));//Quizsと追記 5 //var_dump($entities); 6 7 if($this->request->is('post')){ 8 var_dump($entities); 9 // var_dump($_POST);こっちは情報が表示される。 10 // var_dump($entities);こっちは情報が表示されない。 11 12 } 13 14 } 15
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。