###前提・実現したいこと
CakePHP3でUpload Plugin 3.0を使って画像もしくは動画をアップロードしたいと思っています。
下の公式ドキュメントを参照しながら作っています。
http://cakephp-upload.readthedocs.io/en/latest/
Basic Exampleのように、既存テーブルにphoto,photo_dirのカラムを追加して、
画像ファイルをアップロードしたいです。
http://cakephp-upload.readthedocs.io/en/latest/examples.html#basic-example
###発生している問題・エラーメッセージ
プラグインのロードはできています。
ビヘイビアを登録したコントローラや、addアクションを実行してもエラーメッセージなどは表示されず、
保存されたというメッセージは出力されます。
しかし、実際に作成されたエンティティのphoto,photo_dirフィールドはnullのままで、ルートを設定したディレクトリにもファイルがアップロードされていません。
【追記】
StoreArticlesController.php
public function add() { $storeArticle = $this->StoreArticles->newEntity(); if ($this->request->is('post')) { $storeArticle = $this->StoreArticles->patchEntity($storeArticle, $this->request->data); if ($this->StoreArticles->save($storeArticle)) { $this->Flash->success(__($this->request->data)); return $this->redirect(['action' => 'index']); } $this->Flash->error(__('The store article could not be saved. Please, try again.')); } $this->set(compact('storeArticle')); $this->set('_serialize', ['storeArticle']); }
StoreArticlesTable.php
public function initialize(array $config) { parent::initialize($config); $this->table('store_articles'); $this->displayField('title'); $this->primaryKey('id'); $this->addBehavior('Josegonzalez/Upload.Upload', [ 'photo' => [ 'path' => WWW_ROOT.'files{DS}{model}{DS}{field}{DS}', 'fields' => [ 'dir' => 'photo_dir' ] ] ]); }
add.ctp
<?= $this->Form->create($storeArticle) ?> <fieldset> <legend><?= __('新規投稿') ?></legend> <?php echo $this->Form->input('start', ['empty' => true, 'label' => '掲載開始時間']); echo $this->Form->input('title', ['label' => 'タイトル']); echo $this->Form->input('body', ['label' => '本文']); echo $this->Form->input('photo', ['type' => 'file', 'label' => '画像']); echo $this->Form->input('photo_dir', ['type' => 'hidden']); ?> <script> CKEDITOR.replace( 'body' ); </script> </fieldset> <?= $this->Form->button(__('投稿')) ?> <?= $this->Form->end() ?>
DBテーブル
CREATE TABLE store_articles ( id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY, start DATETIME, title VARCHAR(64) NOT NULL, photo varchar(255), photo_dir varchar(255), body TEXT NOT NULL );
期待する保存先ディレクトリ
webroot/files/StoreArticle/photo/以下
手順は公式ドキュメント通りに踏んでいます。
apacheの作成権限も与えてあり、問題になる部分がわからない次第です。
原因になりそうな部分がありましたら教えていただきたいです。
必要な追加情報あればよろしくお願いいたします。
【追記】
保存されない原因のこころあたりとして、もうひとつ、store_articlesのテーブル構造をmysqlのコマンドライン上でALTER TABLEを用いてphotoとphoto_dirのフィールドを追加しました。
これに伴ってdebug_kitのchacheの部分からキャッシュを削除しましたが、テーブル構造の変更がUpload Plugin 3.0の認識されていない可能性があるのかも?と思います。そのようなケースはありますか?
###補足情報(言語/FW/ツール等のバージョンなど)
Upload Plugin 3.0はPackagistの最新版
composer require josegonzalez/cakephp-upload
PHP 5.6.30 (cli) (built: Jan 19 2017 08:09:42) Copyright (c) 1997-2016 The PHP Group Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies with Zend OPcache v7.0.6-dev, Copyright (c) 1999-2016, by Zend Technologies with Xdebug v2.5.0, Copyright (c) 2002-2016, by Derick Rethans
mysql Ver 14.14 Distrib 5.6.35, for Linux (x86_64) using EditLine wrapper
CakePHP 3.3.12
Vagrant、Apache(httpd)上で起動
回答1件
あなたの回答
tips
プレビュー