2013-03-18 3 views
0

Здравствуйте, я пытаюсь создать форму ZF2 с входным файлом.Zend - inputfilter get randomize name

У меня есть форма с вводом файла, и я хочу вставить рандомизированное имя в свой db.

Как я могу вернуть рандомизированное имя? спасибо.

Это простой класс формы:

class OrdineForm extends Formhttp://stackoverflow.com/questions/ask 

public function __construct($name = null) 
{ 

    parent::__construct('ordine'); 
    $this->setAttribute('method', 'post'); 
    $this->addElements(); 
    $this->addInputFilter(); 

} 
public function addElements(){ 

    $this->add(array(
      'name' => 'pdf', 
      'attributes' => array(
        'type' => 'text', 
        'disabled' =>'true', 
      ), 
      'options' => array(
        'label' => 'PDF', 
      ), 
    )); 


    // FILE INPUT 
    $file = new File('file'); 
    $file 
    ->setLabel('PDF attach') 
    ->setAttributes(array(
      'id' => 'file', 

    )); 
    $this->add($file); 

    $this->add(array(
     'name' => 'submit', 
     'attributes' => array(
      'type' => 'submit', 
      'value' => 'Add', 
      'id' => 'submitbutton', 
      'class' => 'btn btn-success' 
     ), 
    )); 
} 
public function addInputFilter() 
{ 
    $inputFilter = new InputFilter\InputFilter(); 
    $fileInput= new FileInput('file'); 
    $fileInput->setRequired(false); 
    $fileInput->getFilterChain()->attachByName(
      'filerenameupload', 
      array(
        'target' => './public/tmpuploads/', 
        'randomize' => true, 
        "UseUploadname" => true, 
      ) 
    ); 
    $inputFilter->add($fileInput); 

    $this->setInputFilter($inputFilter); 
} 

}

ответ

0

После заверило формы в контроллере можно использовать $form->getData();

должен быть ключ «файл» поскольку это то, что вы назвали своим файловым элементом. Внутри этого ключа находится «tmp_name».

Это будет рандомизированное имя.

Например:

public function uploadfileAction() 
{ 
    //get form and filter 
    $form = $this->getServiceLocator()->get('SomeModule\Form\UploadFileForm'); 
    $filter = $this->getServiceLocator()->get('SomeModule\Form\UploadFileFilter'); 
    $form->setInputFilter($filter->getInputFilter()); 

    if ($this->getRequest()->isPost()) { 
     //merge files with post 
     $post = array_merge_recursive(
      $this->getRequest()->getPost()->toArray(), 
      $this->getRequest()->getFiles()->toArray() 
     ); 

     //set data in form 
     $form->setData($post); 

     //check is valid- form data will now contain new name 
     if ($form->isValid()) { 
      var_dump($form->getData()); 
     } 
    } 
} 

В результате свалка массив может выглядеть примерно так:

array(13) { 
    ["file"]=> 
    array(5) { 
    ["name"]=> 
    string(14) "some-pdf.pdf" 
    ["type"]=> 
    string(24) "application/pdf" 
    ["tmp_name"]=> 
    string(46) "/public/tmpuploads/new-randomized-name.pdf" 
    ["error"]=> 
    int(0) 
    ["size"]=> 
    int(651264) 
    } 
    ["submit"]=> 
    string(6) "Submit" 
    ["csrf"]=> 
    string(32) "4df771bb2fb14e28992a408583745946" 
} 

Вы можете просто сделать:

$formData = $form->getData(); 
$fileNewLocation = $formData['file']['tmp_name']; 
//do what you want with $fileNewLocation 
+0

Отлично! Спасибо! – lukabers

Смежные вопросы