こんにちは。
現在cakephp3を覚えなくてはいけない状況なので、学び始めた者です!
個人学習で、
名前やメルアドを入力してもらい、同時に画像(動画)もアップしてもらう仕組みを作ってみています。
そこでform helperを使ってビューにformを作ってコントローラーで仕組みをいじっている段階です。
(不細工なのはご了承ください。。。)
php
1 public function check(){ 2 $this->set("message","アップロードするファイルを選んでください"); 3 $usersTable = $this->UsersTables->newEntity(); 4 5 if ($this->request->is('post')) { 6 $usersTable = $this->UsersTables->patchEntity($usersTable, $this->request->getData()); 7 $uploaddir = WWW_ROOT; 8 $uploadfile = $uploaddir.basename($this->request->getData('UploadData.name')); 9 10 if (move_uploaded_file($this->request->getData('UploadData.tmp_name'), $uploadfile)) { 11 if ($this->UsersTables->save($usersTable)) { 12 $this->Flash->success(__('保存が完了しました')); 13 return $this->redirect(['action' => 'index']); 14 } 15 $this->Flash->error(__('保存が失敗しました')); 16 } 17 } 18 $this->set(compact('usersTable')); 19 }
html
1<?php 2/** 3 * @var \App\View\AppView $this 4 * @var \App\Model\Entity\UsersTable $usersTable 5 */ 6?> 7<nav class="large-3 medium-4 columns" id="actions-sidebar"> 8 <ul class="side-nav"> 9 <li class="heading"><?= __('Actions') ?></li> 10 <li><?= $this->Html->link(__('List Users Tables'), ['action' => 'index']) ?></li> 11 </ul> 12</nav> 13 14 15<div class="usersTables form large-9 medium-8 columns content"> 16 <?= $this->Form->create($usersTable,['enctype' => 'multipart/form-data']) ?> 17 <fieldset> 18 <legend><?= __('下記に必要事項を入力してください') ?></legend> 19 <?php 20 echo $this->Form->control('company_name',["label" => "会社名"]); 21 echo $this->Form->control('deps_name',["label" => "部署"]); 22 echo $this->Form->control('registrant_name',["label" => "登録者"]); 23 echo $this->Form->control('mail',["label" => "メールアドレス"]); 24 echo ($message); 25 echo $this->Form->control('UploadData',['type'=>'file','accept'=>'video/*',"label" => ""]); 26 ?> 27 </fieldset> 28 <?= $this->Form->button(__('確認')); ?> 29 <?= $this->Form->end() ?> 30</div> 31
まず1つ目の疑問ですが、html(ビュー)のform作成始めに
html
1$this->Form->create($usersTable,['enctype' => 'multipart/form-data'])
と記入していますが、createの第一引数はモデルクラスと同名にするという認識で合っていますか?
ドキュメントには
// /articles/add において
// $article は、空の Article エンティティーである必要があります。
echo $this->Form->create($article);
とあるのでモデルクラスのエンティティーが関係しているのだとは予想できます。(記入されたデータを使ってエンティティー(レコード)を作成する?)
しかし、書籍やネットで見るコードの中には$usersTableという書き方と'usersTable'という書き方があります。
どちらの書き方でも保存できてしまうので、後々これが足を引っ張るようなことが無いように理解したいです。
※もちろん空欄で書くと”Unable to find table class for current entity”と怒られます。
どちらが一般的な認識でしょうか?
2つ目にphp(コントローラー)の末尾に
php
1$this->set(compact('usersTable'));
と書いてありますが、なぜこの変数を再度同じビューに投げているのでしょうか?色々参考に書いたため意味が理解できていません。また、このコードを書かないと一つ目の疑問のところと同じ段で
Undefined variable: usersTable
とエラーが出ます。この二つの関係性が理解できません。
周りに聞くことができる環境でもないため、途方にくれています。
協力お願いいたします。
回答2件
あなたの回答
tips
プレビュー