getdata при вводе файла возвращает только имя файла, а не массив деталей
У меня есть форма, в которой есть fieldset с полем загрузки файла. Когда я делаю var_dump
на $form->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
?
например
array (size=13)
'logo' => string 'my-image.gif' (length=12)
//... other fields here
Я использую форму для других вещей и уже переопределил getData
поэтому хотелось бы, чтобы ответ находился в наборе полей.
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;
}
}
Ваш класс fieldset должен реализовывать InputFilterProviderInterface
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]
]
]
];
}
}
Вы можете объединить несколько фильтров, например, чтобы переименовать файл раньше.