2017-07-22 5 views
1

CakePHP3を使用して画像/ファイルをデータベースにアップロードするにはどうすればよいですか?ユーザーがプロフィール画像をアップロードできるプロフィールページを作成しています。データベースはImagesテーブル(ID、ファイル名とイメージ(BLOB))、およびUsersテーブルで構成され、Imagesに関連付けられるimage_idカラムを持ちます。以下は私のコードです。 TempleteのCakePHP3でデータベースにファイル/画像をアップロードする

一部は、このコードは、データベースに画像を保存しない

<?= $this->Form->create($user, ['type' => 'file']) ?> 
<?= $this->Form->input('image', ['type' => 'file']) ?> 
<?= $this->Form->button(__('Save')) ?> 
<?= $this->Form->end() ?> 

コントローラファイル

public function edit($id = null) 
{ 
    $user = $this->Users->get($id, ['contain' => ['Images']]); 
    if ($this->request->is(['patch', 'post', 'put'])) { 
     $data = $this->request->data; 
     $user = $this->Users->patchEntity($user, $data); 
     if ($data['image']['size'] > 0 && $data['image']['error'] == 0) { 
     // Image is uploaded. 
      if (!empty($user->image_id)) { 
       // Delete old image. 
       $old_image = $this->Users->Images->get($user->image_id); 
       $this->Users->Images->delete($old_image); 
      } 
      // Trying to create a new Images entity with $data 
      $new_image = $this->Users->Images->newEntity($data['image']); 
      $new_image->filename = $data['image']['name']; 
      $new_image->image = $data['image’];//This part seems to be incorrect. 
      $this->Users->Images->save($new_image)) { 
      $user->image = $new_image; 
     } else { 
      $user->image_id = null; 
      $user->image = null; 
     } 
     if ($this->Users->save($user)) { 
      this->Flash->success(__('The user profile has been saved.')); 
      return $this->redirect(['action' => 'edit', $user->id]); 
     } 
     $this->Flash->error(__('The user could not be saved. Please, try again.')); 
    } 
    $this->set(compact('user')); 
    $this->set('_serialize', ['user']); 
} 

を提出します。私はdebug($data);をチェックしました。

{'image' => [ 
     'name' => 'image_name.png', 
     'type' => 'image/png', 
     'tmp_name' => '/tmp/phphmeViC', 
     'error' => (int) 0, 
     'size' => (int) 4003 
    ]} 

実際のイメージファイルはどこですか? $new_imageまたは$userにどのように渡すことができますか?本当に助けてくださってありがとうございます。前もって感謝します!

+1

データベースを更新しているモデルを表示します。 –

+0

ここにある '' 'cakephp3'''ファイルを簡単に検索すると、あなたの質問に答えることができます。例えば[こちら](https://stackoverflow.com/questions/38049805/cakephp3-upload-image-file)を見てください。 –

+0

[CakePHP3 - アップロード画像ファイル](https://stackoverflow.com/questions/38049805/cakephp3-upload-image-file)の複製可能 –

答えて

1

まず、プロファイルイメージのようなバイナリデータをデータベースにアップロードしないでください。 2番目のポイント。ファイル名と画像の場所をDBに保存するだけです。あなたのウェブサイトを傷つけるHTMLは特定の経路からイメージを読み込みます。そうすることができます:<img src="{$user->profile_image}" />または何でも。

+0

ありがとう!私は画像を保存するためにdbを使用しないことにしました。 https://stackoverflow.com/questions/38049805/cakephp3-upload-image-fileこの質問はそうするのに役立ちます。 –