2017-06-09 13 views
0

イメージを送信できるフォームがあります。これは元々私のコードではありません。私はそれを継承しています。問題を解決しようとしています。 。cakephp formhelper:編集時に入力ファイルから現在のファイルを取得する

このフォームからデータを編集するとき、入力ファイルは他の入力ではなく空です。したがって、実際に保存すると、現在のファイルがデータベースの「配列」に置き換えられます。

私はそれが変更されていない場合、現在のものを保持することができるようにしたいですか?

フォーム編集:コントローラから

<h1>Edit</h1> 
<?php 
echo $this->Form->create($template,['enctype' => 'multipart/form-data']); 
echo $this->Form->input('title'); 
echo $this->Form->input('works_id');     
echo $this->Form->input('photo',['type' => 'file']); 
echo $this->Form->input('text', ['rows' => '4']); 
echo $this->Form->input('url'); 
echo $this->Form->button(__('Save')); 
echo $this->Form->end(); 
?> 

編集機能:それがさらに取得する方法について、私を混乱させるため、 FILE_DIRとファイル名:それは2 colomnsを節約私のデータベースでは

public function edit($id = null){ 
    $template = $this->Templates->get($id); 
    if ($this->request->is(['post', 'put'])) { 
     $template = $this->Templates->patchEntity($template, $this->request->data,['associated' => ['Works']]); 
     if ($this->Templates->save($template)) { 
      $this->Flash->success(__('Your template has been updated.')); 
      return $this->redirect(['action' => 'index']); 
     } 
     $this->Flash->error(__('Unable to update your template.')); 
    } 
    $this->set('template', $template); 

    $works = $this->Templates->Works->find('list'); 
    $this->set(compact('works')); 
} 

編集フォームのファイル

編集:TemplatesTableを追加:

<?php 
namespace App\Model\Table; 

use Cake\ORM\Table; 
use Cake\Validation\Validator; 

class TemplatesTable extends Table 
{ 
protected function _initializeSchema(\Cake\Database\Schema\Table $table){ 
    $table->columnType('photo', 'proffer.file'); 
    return $table; 
} 
public function initialize(array $config){ 
    $this->addBehavior('Timestamp'); 
    $this->addBehavior('Proffer.Proffer', [ 
     'photo' => [ 
      'root' => WWW_ROOT.'files', 
      'dir' => 'photo_dir', 
      'thumbnailSizes' => [ 
       'square' => ['w' => 200, 'h' => 200], 
       'portrait' => ['w' => 100, 'h' => 300, 'crop' => true], 
      ], 
      'thumbnailMethod' => 'gd' // Options are Imagick, Gd or Gmagick 
     ] 
    ]); 
    $this->belongsTo(
     'Works', 
     [ 
      'foreignKey' => 'work_id', 
     ] 
    ); 
} 
public function validationDefault(Validator $validator){ 
    $validator 
     ->notEmpty('work_id') 
     ->notEmpty('title'); 
    return $validator; 
} 
} 
+2

あなたは空のファイルアップロードの配列フィールドを破棄し、どこか適切なロジックを持っている必要があります。ファイルのアップロードを処理するコードを見なくてもそれ以上のアドバイスはできません。 – ndm

+0

@ndmありがとう、私が見つけたTemplatesTableモデルで編集しました。これはアップロード時にポートレートと正方形の形式でサムネイルを作成することを知っています。 私はより多くの手がかりを探すのに役立つことを願って –

答えて

1

ドキュメントによると、Proffer行動は箱から出して空のアップロードを処理することができ、あなたはちょうどそれができるようにするためにそれに応じてフィールドの検証ルールを設定する必要がそれを更新していないとき、あなたは基本的なケーキ 規則を使用してこれを設定することができます レコードを作成するときに、ユーザーがファイルを送信したい場合は

、しかし:アップデートには空です。

$validator 
    ->requirePresence('image', 'create') 
    ->allowEmpty('image', 'update'); 

だから今、あなたのユーザーがファイルに彼らが レコードを更新するたびにアップロードする必要はありません。

+0

パーフェクト!大いに助けてくれてありがとう! (もう一度!) –

関連する問題