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

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

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

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

Q&A

解決済

1回答

2246閲覧

cakephpでuploadpackでsaveできない

atsupoooon

総合スコア47

CakePHP

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

0グッド

0クリップ

投稿2016/01/25 14:23

編集2016/01/25 14:24

CakePHP 2.6
php 5.6

プラグインのuploadpackを使って画像のアップロードの処理を
実装したいと思い下記のサイトを参考にして実装しました。

http://www.kaasan.info/archives/2482

基本的な機能に関しては、実装できました。
ファイルのアップロードをして、表示させるというところまでは。

しかし、更新した内容を編集するとなぜか。
全く新しいデータが追加されます。

ーーーーーーーーーーーーーーーーーーーーーーーー
コントローラー

public function edit($id = null) { if (!$this->Cosme->exists($id)) { throw new NotFoundException(__('Invalid cosme')); } if ($this->request->is(array('post', 'put'))) { if ($this->Cosme->save($this->request->data)) { $this->Session->setFlash(__('The cosme has been saved.')); return $this->redirect(array('action' => 'index')); } else { $this->Session->setFlash(__('The cosme could not be saved. Please, try again.')); } } else { $options = array('conditions' => array('Cosme.' . $this->Cosme->primaryKey => $id)); $this->request->data = $this->Cosme->find('first', $options); }

モデル

public $actsAs = array('Search.Searchable', 'UploadPack.Upload' => array( 'img01' => array( //'default_url' => 'path/to/default/image',//画像がないファイルはここのパス画像を表示 //'resizeToMaxWidth' => true,//widthが広い画像はリサイズしてアップロード 'quality' => 70,//画像の質 100がMAX 'path' => ':webroot/upload/cosmes/:id.:extension',//画像の保存フォルダ名 'styles' => array( 'big' => '300×300', 'small' => '[100×80]', 'thumb' => '80I', ) ) ), ); public $validate = array( 'img01' => array( 'rule' => array('attachmentContentType', array('image/jpeg', 'image/gif','image/png')), 'message' => 'jpgとgifとpngファイルのみアップロードできます。' ) );

edit

<div class="container"> <div class="row"> <div class="cosmes form"> <?php echo $this->Form->create('Cosme',array('type' => 'file', 'inputDefaults' => array( 'div' => 'form-group', 'wrapInput' => false, 'class' => 'form-control' ), 'class' => 'well' ));?> <fieldset> <legend><?php echo __('Edit Cosme'); ?></legend> <?php echo $this->Form->input('title'); echo $this->Form->input('body01'); echo $this->Form->file('Cosme.img01'); echo $this->Form->error('Cosme.img01'); echo $this->Form->input('body02'); echo $this->Form->input('body03'); echo $this->Form->input('rule'); echo $this->Form->input('kodawari'); echo $this->Form->input('store'); echo $this->Form->input('category_id'); ?> </fieldset> <?php echo $this->Form->end(__('Submit')); ?> </div> </div> </div>

なにが原因なのでしょうか?

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

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

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

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

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

guest

回答1

0

ベストアンサー

再現まではできていないのですが、更新対象とするレコードのキーを指定していないため、save()でinsertを発行しているように思います。
以下のように、save()を呼ぶ前にidを指定したらいかがでしょうか?

PHP

1 if ($this->request->is(array('post', 'put'))) { 2 $this->Cosme->id = $id; // ここで更新対象のレコードのidを設定する 3 if ($this->Cosme->save($this->request->data)) { 4 $this->Session->setFlash(__('The cosme has been saved.')); 5 return $this->redirect(array('action' => 'index')); 6 } else { 7 $this->Session->setFlash(__('The cosme could not be saved. Please, try again.')); 8 }

投稿2016/01/26 00:22

KatsumiTanaka

総合スコア924

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

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

atsupoooon

2016/01/26 09:46

回答ありがとうございます! idを指定するといけました! ご指摘感謝致します。 また、ご指摘していただければありがたいです。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問