getdata on File input to return only filename, not array of details
getdata on File input to return only filename, not array of details
我有一个表单,其中包含一个包含文件上传字段的字段集。当我在 $form->getData()
上执行 var_dump
时,我看到了文件字段的数据数组:
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
时如何将元素 return 只有名称?
例如
array (size=13)
'logo' => string 'my-image.gif' (length=12)
//... other fields here
我正在将表单用于其他用途,并且已经覆盖 getData
因此希望将答案保留在字段集中。
您可以覆盖表单中的 getData() 方法。
public function getData()
{
$data = parent::getData();
$logo = $data['logo'];
$data['logo'] = $logo['name'];
return $data;
}
添加所有必要的预防措施以确保数组中存在键。
字段集的补充
使用文件集,您可以使用过滤器更改 return 文件结构:
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;
}
}
您的字段集 class 必须实现 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]
]
]
];
}
}
您可以链接多个过滤器,例如重命名之前的文件。
我有一个表单,其中包含一个包含文件上传字段的字段集。当我在 $form->getData()
上执行 var_dump
时,我看到了文件字段的数据数组:
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
时如何将元素 return 只有名称?
例如
array (size=13)
'logo' => string 'my-image.gif' (length=12)
//... other fields here
我正在将表单用于其他用途,并且已经覆盖 getData
因此希望将答案保留在字段集中。
您可以覆盖表单中的 getData() 方法。
public function getData()
{
$data = parent::getData();
$logo = $data['logo'];
$data['logo'] = $logo['name'];
return $data;
}
添加所有必要的预防措施以确保数组中存在键。
字段集的补充
使用文件集,您可以使用过滤器更改 return 文件结构:
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;
}
}
您的字段集 class 必须实现 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]
]
]
];
}
}
您可以链接多个过滤器,例如重命名之前的文件。