|
|
Zend Framework 2 Documentation (Manual) | |
|
File: /_sources/modules/zend.input-filter.file-input.txt
Size: | 2953 |
Storage flags: | no_autoload,compress/gzip (40%) |
.. _zend.input-filter.file-input:
File Upload Input
=================
The ``Zend\InputFilter\FileInput`` class is a special ``Input`` type for uploaded files found in the ``$_FILES`` array.
While ``FileInput`` uses the same interface as ``Input``, it differs in a few ways:
1. It expects the raw value to be in the ``$_FILES`` array format.
2. The validators are run **before** the filters (which is the opposite behavior of ``Input``).
This is so that any ``is_uploaded_file()`` validation can be run prior to any filters that may
rename/move/modify the file.
3. Instead of adding a ``NotEmpty`` validator, it will (by default) automatically add a
``Zend\Validator\File\UploadFile`` validator.
The biggest thing to be concerned about is that if you are using a ``<input type="file">`` element in your form,
you will need to use the ``FileInput`` **instead of** ``Input`` or else you will encounter issues.
.. _zend.input-filter.file-input.basic-usage:
Basic Usage
^^^^^^^^^^^
Usage of ``FileInput`` is essentially the same as ``Input``:
.. code-block:: php
:linenos:
use Zend\Http\PhpEnvironment\Request;
use Zend\Filter;
use Zend\InputFilter\InputFilter;
use Zend\InputFilter\Input;
use Zend\InputFilter\FileInput;
use Zend\Validator;
// Description text input
$description = new Input('description'); // Standard Input type
$description->getFilterChain() // Filters are run first w/ Input
->attach(new Filter\StringTrim());
$description->getValidatorChain() // Validators are run second w/ Input
->attach(new Validator\StringLength(array('max' => 140)));
// File upload input
$file = new FileInput('file'); // Special File Input type
$file->getValidatorChain() // Validators are run first w/ FileInput
->attach(new Validator\File\UploadFile());
$file->getFilterChain() // Filters are run second w/ FileInput
->attach(new Filter\File\RenameUpload(array(
'target' => './data/tmpuploads/file',
'randomize' => true,
)));
// Merge $_POST and $_FILES data together
$request = new Request();
$postData = array_merge_recursive($request->getPost()->toArray(), $request->getFiles()->toArray());
$inputFilter = new InputFilter();
$inputFilter->add($description)
->add($file)
->setData($postData);
if ($inputFilter->isValid()) { // FileInput validators are run, but not the filters...
echo "The form is valid\n";
$data = $inputFilter->getValues(); // This is when the FileInput filters are run.
} else {
echo "The form is not valid\n";
foreach ($inputFilter->getInvalidInput() as $error) {
print_r ($error->getMessages());
}
}
Also see
- :ref:`File filter classes<zend.filter.file>`
- :ref:`File validator classesr<zend.validator.file>`
For more information about the PHK package format: http://phk.tekwire.net