我无法使用fileprg
插件来处理集合中的文件。
我正在尝试使用FormCollections
上传多个文件,但在$form->getData()
中没有与我的收藏或文件相关的密钥。
我使用简单的file input
(使用相同的格式)测试了表单和fileprg,并且上传/重命名了它,并且它位于$form->getData()
。
答案 0 :(得分:0)
在文件\Zend\Mvc\Controller\Plugin\FilePostRedirectGet
中,您要查看的两个函数是getNonEmptyUploadData
(即提供回调函数)和traverseInputs
(这是一个荣耀的foreach
检查每个输入过滤器然后通过上面的回调运行它和值。
要允许此插件处理集合,您需要扩展该类并更改上述函数:
/**
* Traverse the InputFilter and run a callback against each Input and associated value
*
* @param InputFilterInterface $inputFilter
* @param array $values
* @param callable $callback
* @return array|null
*/
protected function traverseInputs(InputFilterInterface $inputFilter, $values, $callback)
{
$returnValues = null;
foreach ($values as $name => $value) {
if (!$inputFilter->has($name)) {
continue;
}
$input = $inputFilter->get($name);
if ($input instanceof InputFilterInterface && is_array($value)) {
if ($input instanceof CollectionInputFilter) {
$retVal = null;
foreach ($value as $k => $val) {
$retVal2 = $this->traverseInputs($input->getInputFilter(), $val, $callback);
if ($retVal2)
$retVal[$k] = $retVal2;
}
} else
$retVal = $this->traverseInputs($input, $value, $callback);
if (null !== $retVal) {
$returnValues[$name] = $retVal;
}
continue;
}
$retVal = $callback($input, $value);
if (null !== $retVal) {
$returnValues[$name] = $retVal;
}
}
return $returnValues;
}
/**
* Traverse the InputFilter and only return the data of FileInputs that have an upload
*
* @param InputFilterInterface $inputFilter
* @param array $data
* @return array
*/
protected function getNonEmptyUploadData(InputFilterInterface $inputFilter, $data)
{
return $this->traverseInputs(
$inputFilter,
$data,
function ($input, $value) {
$messages = $input->getMessages();
if (is_array($value) && $input instanceof FileInput && empty($messages)) {
$rawValue = $value;
if (
(isset($rawValue['error']) && $rawValue['error'] !== UPLOAD_ERR_NO_FILE)
|| (isset($rawValue[0]['error']) && $rawValue[0]['error'] !== UPLOAD_ERR_NO_FILE)
) {
return $value;
}
}
return;
}
);
}
这是一个差异,显示哪些行被更改:https://github.com/rafam31/zf2/commit/c481e7404faf93beb4c67a6a4b7490fec15d279b