Zend - inputfilter获取随机化名称

时间:2013-03-18 10:30:54

标签: zend-form zend-framework2

您好我正在尝试使用输入文件的ZF2表单。

我有一个带有文件输入的表单,我想将随机化名称插入到我的数据库中。

如何返回随机名称? 感谢。

这是一个简单的表单类:

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

}

1 个答案:

答案 0 :(得分: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