2016-08-08 18 views
1

Ich habe ein Formular, das ein Fieldset mit einem Datei-Upload-Feld enthält. Wenn ich ein var_dump auf $form->getData() tue Ich werde eine Reihe von Daten für das Dateifeld angezeigt:getdata on Dateieingabe, um nur Dateiname zurückzugeben, nicht Array von Details

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 

Wie kommt das Element nur den Namen zurück, wenn ich getData nennen?

z.B.

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

ich das Formular für andere Dinge bin mit und haben bereits getData so außer Kraft gesetzt würde gerne die Antwort in der Fieldset gelegen halten.

Antwort

1

Sie können die Methode getData() in Ihrem Formular überschreiben.

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

Fügen Sie alle notwendigen Vorsichtsmaßnahmen hinzu, um die Existenz der Schlüssel in den Arrays sicherzustellen.

Zuschläge für einen Fieldset

ein fileset verwenden, können Sie einen Filter verwenden, um die Rückkehr Dateistruktur zu ändern:

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; 
    } 
} 

Ihre Fieldset Klasse muss InputFilterProviderInterface implementieren

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] 
       ] 
      ] 
     ]; 
    } 
} 

Sie können mehrere Filter verketten, zB um die Datei vorher umzubenennen.

+0

Ich habe 'getData' bereits in der Form für etwas anderes außer Kraft gesetzt. Gibt es eine Möglichkeit, dies in dem Fieldset-Objekt zu tun? –

+0

Ich habe gerade meine Antwort für ein Fieldset abgeschlossen. –