2017-05-13 1 views
0

나는 cakephp 버전을 사용하고 있지만 파일은 성공적으로 업로드되었지만 요청 엔티티에서 URL을 업데이트하고 싶습니다. 하나의 엔티티를 업데이트 할 수 있지만 전부는 아닙니다. $ post-> url = WWW_ROOT.'uploads/filename ';Cakephp 3.0 여러 파일 업로드 url

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 테이블과 직접 연결되어 있으므로 아무 것도 변경할 필요가 없습니다.

관련 모델 데이터로 작업하는 경우 'associated' 키를 사용하여 merging the entity data을 입력 할 때 채울 연결을 지정해야합니다.

템플릿

당신은 당신의 요청 데이터가 올바르게 포맷되도록 올바른 필드 이름을 사용하여 템플릿에서 관련 분야를 포함해야합니다. 기존 이미지 기존 이미지의 삭제의 표시 처리, 새로운 업로드 필드로 추가하는 것은 당신에게 달려있다,이 예제의 범위 밖의 방법

// 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> 

.