我有一个表单,其中包含一个带有文件上传字段的字段集。当我在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
时,如何让元素只返回名称?
e.g。
array (size=13)
'logo' => string 'my-image.gif' (length=12)
//... other fields here
我正在使用该表单进行其他操作并已覆盖getData
,因此我希望将答案保留在字段集中。
答案 0 :(得分: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]
]
]
];
}
}
您可以链接多个过滤器,例如以前重命名文件。