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

您可以链接多个过滤器,例如重命名之前的文件。