2016-08-08 2 views
1

파일 업로드 필드가있는 필드 세트가있는 양식이 있습니다.파일 입력시 getdata가 아닌 파일 이름 만 반환합니다.

array (size=13) 
    'logo' => 
    array (size=5) 
     'name' => string 'my-image.gif' (length=12) 
     'type' => string 'image/gif' (length=9) 
     'tmp_name' => string 'C:\xampp\htdocs\images\my-image.gif' (length=35) 
     'error' => int 0 
     'size' => int 391 
    //... other fields here 

어떻게 getData를 호출 할 때 요소가 이름 만 반환받을 수 있나요 : 나는 $form->getData()var_dump을 수행 할 때 내가 파일 필드의 데이터 배열을 표시되는 건가요?

내가 다른 것들에 대한 양식을 사용하고 이미 getData를 오버라이드 (override) 한

array (size=13) 
    'logo' => string 'my-image.gif' (length=12) 
    //... other fields here 

그래서 FIELDSET에있는 답을 유지하고 싶습니다.

답변

1

양식에서 getData() 메소드를 대체 할 수 있습니다.

public function getData() 
{ 
    $data = parent::getData(); 
    $logo = $data['logo']; 
    $data['logo'] = $logo['name']; 
    return $data; 
} 

배열에 키가 있는지 확인하기 위해 필요한 모든 사전주의 사항을 추가하십시오.

namespace your\namespace; 

use Zend\Filter; 

class FilterFileName extends Filter\AbstractFilter 
{ 
public function filter($value) 
{ 
     if (! is_scalar($value) && ! is_array($value)) { 
      return $value; 
     } 
     if (is_array($value)) { 
      if (! isset($value['name'])) { 
       return $value; 
      } 
      $return = $value['name']; 
     } else { 
      $return = $value; 
     } 
     return $return; 
    } 
} 

귀하의 필드 셋 클래스는

use your\namespace\FilterFileName; 

class YourFieldset extends ZendFiedset implements InputFilterProviderInterface 
{ 
    public function __construct() 
    { 
     // your code ... like : 
     parent::__construct('logo'); 

     $file_element = new Element\File('my-element-file'); 
     $file_element->setLabel('Chooze') 
      ->setAttribute('id', 'my-element-file') 
      ->setOption('error_attributes', [ 
       'class' => 'form-error' 
     ]); 
     $this->add($file_element);    
    } 
    public function getInputFilterSpecification() 
    { 
     return [ 
      'element-file' => [ 
       'name' => 'my-element-file', 
       'filters' => [ 
        ['name' => FilterFileName::class] 
       ] 
      ] 
     ]; 
    } 
} 

InputFilterProviderInterface를 구현해야합니다 파일 세트를 사용하여 필드 셋

에 대한

보충 교재, 당신은 반환 파일 구조를 변경하는 필터를 사용할 수 있습니다 이전에 파일의 이름을 바꾸는 것과 같이 여러 필터를 연결할 수 있습니다.

+0

이미 다른 형식을 위해 양식에서'getData'를 재정의했습니다. fieldset 객체에서이 작업을 수행 할 수있는 방법이 있습니까? –

+0

방금 ​​필드 세트에 대한 답을 완성했습니다. –

관련 문제