質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

Q&A

解決済

1回答

870閲覧

cakephp2 upload plugin 画像が保存されない

WoL

総合スコア7

CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

0グッド

0クリップ

投稿2019/08/21 04:22

前提・実現したいこと

よろしくお願いします。
ただ今cakephp2を勉強しており、
公式にあるブログチュートリアルをベースに
upload pluginを追加して画像の投稿を
をできるようにしようとしているところです。

発生している問題・エラーメッセージ

upload pluginの導入方法について以下の
サイトを参考に進めておりました。
http://app-review.poox.xyz/archives/1280

このサイト内にある、新規でテーブルを追加する場合というのを
参考に新規でAttachmentテーブルを作成してやってみましたが、
画像の名前自体はMysqlに登録されるのですが、肝心のimgファイルが
dirの中に入らず詰まっております

その後githubにあるupload pluginの製作者が作ったドキュメント

https://cakephp-upload.readthedocs.io/en/2.x/polymorphic.html

を参考に再度、新規テーブルを追加するやり方でやったのですが、
同じようにwebrootに入らない状態です。

以下ソースコードです。

Model/Attachment.php

<?php App::uses('AppModel', 'Model'); class Attachment extends AppModel { public $actsAs = array( 'Upload.Upload' => array( 'attachment' => array( 'thumbnailSizes' => array( 'xvga' => '1024x768', 'vga' => '640x480', 'thumb' => '80x80', ), ), ), ); public $belongsTo = array( 'Post' => array( 'className' => 'Post', 'foreignKey' => 'foreign_key', ), 'Message' => array( 'className' => 'Message', 'foreignKey' => 'foreign_key', ), ); } ?>

Model/Message.php

<?php App::uses('AppModel', 'Model'); class Message extends AppModel { public $hasMany = array( 'Video' => array( 'className' => 'Attachment', 'foreignKey' => 'foreign_key', 'conditions' => array( 'Video.model' => 'Message', ), ), ); } ?>

Model/Post.php

<?php App::uses('AppModel', 'Model'); class Post extends AppModel { public $actsAs = array('Search.Searchable',); public $filterArgs = array( // 例 'tag_id' => array( 'type' => 'value' ), 'category_id' => array( 'type' => 'value' ), 'title' => array( 'type' => 'like' ), ); public $validate = array( 'user_id' => array( 'numeric' => array( 'rule' => array('numeric'), ), ), 'title' => array( 'notBlank' => array( 'rule' => array('notBlank'), ), ), ); public $belongsTo = array( 'User' => array( 'className' => 'User', 'foreignKey' => 'user_id', 'conditions' => '', 'fields' => '', 'order' => '' ), 'Category'=>array( 'className' =>'Category', 'foreignKey' =>'category_id' ) ); public $hasMany = array( 'Image' => array( 'className' => 'Attachment', 'foreignKey' => 'foreign_key', 'conditions' => array( 'Image.model' => 'Post', ), ), ); public function createWithAttachments($data) { // Sanitize your images before adding them $images = array(); if (!empty($data['Image'][0])) { foreach ($data['Image'] as $i => $image) { if (is_array($data['Image'][$i])) { // Force setting the `model` field to this model $image['model'] = 'Post'; // Unset the foreign_key if the user tries to specify it if (isset($image['foreign_key'])) { unset($image['foreign_key']); } $images[] = $image; } } } $data['Image'] = $images; // Try to save the data using Model::saveAll() $this->create(); if ($this->saveAll($data)) { return true; } // Throw an exception for the controller throw new Exception(__("This post could not be saved. Please try again")); } }

View/Posts/add.ctp

<div class="posts form"> <?php echo $this->Form->create('Post'); ?> <fieldset> <legend><?php echo __('Add Post'); ?></legend> <?php echo $this->Form->input('user_id'); echo $this->Form->input('category_id', array( 'type' =>'select' ) ); echo $this->Form->input('tag_id', array( 'type' =>'select' ) ); echo $this->Form->input('title'); echo $this->Form->input('body'); echo $this->Form->create('Post', array('type' => 'file')); echo $this->Form->input('Image.0.attachment', array('type' => 'file', 'label' => 'Image')); echo $this->Form->input('Image.0.model', array('type' => 'hidden', 'value' => 'Post')); echo $this->Form->end(__('投稿')); ?> </fieldset> </div> <div class="actions"> <h3><?php echo __('Actions'); ?></h3> <ul> <li><?php echo $this->Html->link(__('List Posts'), array('action' => 'index')); ?></li> <li><?php echo $this->Html->link(__('List Users'), array('controller' => 'users', 'action' => 'index')); ?> </li> <li><?php echo $this->Html->link(__('New User'), array('controller' => 'users', 'action' => 'add')); ?> </li> </ul> </div>

画像を保存する際のディレクトリはapp/webroot/files/model/fieldsとの事らしいので
filesの中にattachmentファイルを作成してその中にattachmentファイルを作成しています。

パーミッションの変更はしており、upload pluginのverも2系の物を使用しております。

できることは色々やったつもりですが、いまいち原因がわからない状態です。
すいませんがどこが問題かご教授ください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2019/08/21 04:39

>今cakephp2を勉強しており なぜ今「2」なのでしょうか。一応PHP7はサポートされているものの、今から学ぶのであれば古いバージョンを選ぶ理由はないと思いますが、前提や背景を記載いただけますか?
WoL

2019/08/21 06:09

会社で必要だからです。
guest

回答1

0

ベストアンサー

add.ctp において、 $this->Form->create が2箇所出てきています。
formタグが閉じタグの前に2つある状態になっているかと思われますので、ファイルを含むデータが正常にPOSTされていないと考えられます。(multipart/form-data での送信となっていない)

echo $this->Form->input('Image.0.attachment' の前のものは不要ですので削除して、最初の方を $this->Form->create('Post', array('type' => 'file')) としてください。

投稿2019/08/23 07:34

nojimage

総合スコア957

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

WoL

2019/08/23 10:07

確かに2重してました。 修正したところ無事に保存されました!助かりました、ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問