2017-05-13 7 views
0

私は3.4のcakephpバージョンを使用していますが、ファイルは正常にアップロードされましたが、私はリクエストエンティティでURLを更新します。 1つのエンティティを更新することはできますが、すべてがそうであるとは限りません: $ post-> url = WWW_ROOT.'uploads/filename ';Cakephp 3.0複数のファイルがアップロードされました

HTMLフォーム:

<?= $this->Form->create(null, ['class' => 'form-horizontal', 'id' => 'postSubmit', 'type' => 'file', 'autocomplete' => 'off'])?> 
     <div class="form-group"> 
     <label for="inputEmail3" class="col-sm-4 control-label">Ad Category:</label> 
     <div class="col-sm-8"> 
      <?= $this->Form->select('category_id', $categories, ['class' => 'form-control required categorySelected', 'empty' => 'Select Category'])?> 
     </div>  
     </div> 
     <div class="form-group"> 
     <label for="inputPassword3" class="col-sm-4 control-label">Photos(5 max):</label> 
     <div class="col-sm-8"> 
      <?= $this->Form->input('images.', [ 'type' => 'file', 'id' => 'image', 'multiple' => 'multiple', 'accept' => 'image/jpg, image/jpeg', 'label' => false])?> 
      <p class="help-block">Good photos quick response</p> 
     </div> 
     </div>  

     <div class="form-group"> 
      <div class="col-sm-8 col-sm-offset-4">   
      <?= $this->Form->button('Post Now', ['class' => 'btn custom_btn btn-sm', 'type' => 'submit', 'label' => false])?> 
      </div> 
     </div> 
    </form> 

コントローラーアクション:

$post = $this->Posts->newEntity(); 
$post = $this->Posts->patchEntity($post, $this->request->getData());   


if($this->request->getData()['images']) { 
        $dir = new Folder(WWW_ROOT.'uploads', true, 0755); 
        $files = $this->request->getData()['images']; 
        foreach ($files as $key => $file) { 
         if($file['error'] == 0) { 
          $info = pathinfo($file["name"]); 
          $newfilename = $info["filename"].'_'.time() . '.'. $info["extension"]; 
          if(move_uploaded_file($file["tmp_name"], WWW_ROOT.'uploads/' . $newfilename)) { 
           $post->url = WWW_ROOT.'uploads/' . $newfilename; 


          } 
         } 
        } 
       } 
       if ($this->Posts->save($post)) { 
        $this->Flash->success('Post has been submitted successfully. Please wait 
         for approval'); 
       } 

答えて

0

私はCakePHP3-Profferについて説明を実装することをお勧めいたします怒鳴る:

Uploadi

この例では、現在のテーブルクラスに関連する多くの画像をアップロードする方法を示します。設定例として、UsersテーブルクラスとUserImagesテーブルクラスがあるとします。下の例はちょうどbaked codeです。

テーブル

次のような関係が設定されています。アップロードを受け取っているテーブルクラスに振る舞いを添付してください。それは$_accessible配列の中で

// src/Model/Table/UsersTable.php 
$this->hasMany('UserImages', ['foreignKey' => 'user_id']) 

// src/Model/Table/UserImagesTable.php 
$this->addBehavior('Proffer.Proffer', [ 
    'image' => [ 
     'dir' => 'image_dir', 
     'thumbnailSizes' => [ 
      'square' => ['w' => 100, 'h' => 100], 
      'large' => ['w' => 250, 'h' => 250] 
     ] 
    ] 
]); 

$this->belongsTo('Users', ['foreignKey' => 'user_id', 'joinType' => 'INNER']); 

エンティティ

はあなたのエンティティは、関連するフィールドを許可する必要があります。したがって、この例では、'user_images' => trueがUserエンティティに含まれていることを確認する必要があります。

コントローラ

変化はケーキは、デフォルトで自動的に任意の最初のレベルに関連するデータを節約するような標準的な制御コードに行う必要がありません。 UsersテーブルはUserImagesテーブルに直接関連付けられているため、何も変更する必要はありません。

関連するモデルデータを使用している場合は、merging the entity data'associated'キーを使用してデータを入力するときに、関連付けるデータを指定する必要があります。

テンプレート

あなたはあなたの要求データが正しくフォーマットされるように、正しいフィールド名を使用して、テンプレート内の関連フィールドを含める必要があります。

// Don't forget that you need to include ['type' => 'file'] in your ->create() call 
<fieldset> 
    <legend>User images</legend> 
    <?php 
    echo $this->Form->input('user_images.0.image', ['type' => 'file']); 
    echo $this->Form->input('user_images.1.image', ['type' => 'file']); 
    echo $this->Form->input('user_images.2.image', ['type' => 'file']); 
    ?> 
</fieldset> 
既存の画像の表示に対処する方法

、既存の画像を削除し、新しいアップロードフィールドを追加しますまで、この例の範囲外です。

関連する問題