2017-04-26 2 views
0

매우 기초적인 이미지를 업로드하려고합니다. 여기 내 입력 필터 파일입니다 : ZF RenameUpload 필터가 작동하지 않습니다.

namespace MyNamespace; 

use Zend\InputFilter\InputFilter; 
use Zend\Filter\StringTrim; 
use Zend\Filter\StripTags; 
use Zend\Filter\File\RenameUpload; 
use Zend\Validator\File\Size; 
use Zend\Validator\File\MimeType; 

class MyFilter extends InputFilter 
{ 
    public function __construct() 
    { 
     $this->add(
      [ 
       'name' => 'image', 
       'required' => true, 
       'filters' => [ 
        [ 
         /* 'name' => RenameUpload::class, */ 
         'name' => 'filerenameupload', 
         'options' => [ 
          'target' => './data/uploads/images/.ext', 
          'overwrite' => true, 
          'randomize' => true, 
          'use_upload_extension' => true, 
         ] 
        ] 
       ], 
       'validators' => [ 
        [ 
         'name' => Size::class, 
         'options' => [ 
          'max' => '10MB', 
         ], 
        ], 
        [ 
         'name' => MimeType::class, 
         'options' => [ 
          'mimeType' => [ 
           'image/jpg', 
           'image/jpeg', 
           'image/png' 
          ] 
         ], 
        ], 
       ], 
      ] 
     ); 
    } 
... 

나는 $request->getFiles()->toArray()를 확인하고 업로드 된 이미지가있다. 컨트롤러에서 내가하는 일 :

$postData = array_merge (
    $this->request->getPost()->toArray(), 
    $this->request->getFiles()->toArray() 
); 

$form = new MyForm; 
$form->setInputFilter(new MyFilter); 
$form->setData($postData); 

$form->isValid()      // this returns true. 

업로드 폴더를 확인할 때 아무 것도 없습니다. 폴더 소유자가 apache를 실행하는 사용자와 동일하기 때문에 파일 시스템 문제는 아닙니다. 권한은 755입니다.

쓸 곳이있는 폴더를 삭제하면 $form->isValid()은 여전히 ​​true을 반환합니다.

내가 뭘 잘못하고 있니?

답변

0

RenameUpload 필터를 사용하려면 적절한 업로드 디렉토리를 제공하십시오. 다음

'./data/upload/images/' 

사용 array_merge_recursive()와 대신 array_merge(). array_merge()은 유사한 배열 키를 orverrides하기 때문에 (마지막 하나만 유지).

그러면 이미지가 RenameUpload 필터에 의해 할당 된 대상에 업로드됩니다.

<?php 

... 

if($form->isValid()) { 
    // Move uploaded file to the assigned directory. 
    $data = $form->getData(); 

    // Do other stuff 
    ... 
} 
+0

문제는'isValid()'가 아니라'getData()'가 호출 된 후 "움직이는"get이 완료된 것 같습니다. –

+0

예! 당신 말이 맞아요! 나는 ** array_merge_recursive() **에 대해 말했습니다. 왜냐하면 ** 키 **가 병합 할 배열과 비슷하다면 모든 값을 유지하기 때문입니다. – unclexo

관련 문제