Хорошо, так что я больше копался, и оказалось, что может быть проблема с тем, как я цепочил addFilter()
, поэтому я решил двигаться в другом направлении, пытаясь изолировать каждый файл и обрабатывать его загрузку индивидуально.Пока, похоже, работает.Вот пересмотренный код:
$data['image'] = (isset($_FILES["image"]) && $_FILES["image"]["name"] ? $_FILES["image"]["name"] : NULL);
$data['file'] = (isset($_FILES["file"]) && $_FILES["file"]["name"] ? $_FILES["file"]["name"] : NULL);
$upload = new Zend_File_Transfer();
$files = $upload->getFileInfo();
$options = array('ignoreNoFile' => TRUE);
$upload->setOptions($options);
foreach ($files as $field => $contents)
{
if(!strlen($contents["name"]))
{
continue;
}
// upload instructions for image
if ($field == 'image')
{
$upload->addFilter('Rename', array('target' => RESOURCES_IMG . $data['image'], 'overwrite' => TRUE), 'image')
->addValidator('ImageSize', false, array('minwidth' => 100,
'maxwidth' => 100,
'minheight' => 100,
'maxheight' => 100), 'image')
->addValidator('Extension', false, 'jpg', 'image');
}
// upload instructions for file
if ($field == 'file')
{
$upload->addFilter('Rename', array('target' => RESOURCES_FILES . $data['file'], 'overwrite' => TRUE), 'file');
}
if(!$upload->receive($field)) {
echo '<h1>Oops</h1><p>Please correct the following errors: <hr /></p>';
foreach ($upload->getMessages() as $key => $val)
{
echo '<p><strong>' . $key . '</strong><br />' . $val . '</p>';
}
die;
//return;
}
} // foreach
Псевдо Объяснение
Я использую getFileInfo()
, чтобы получить массив файлов, доступных для меня, затем я зацикливаюсь на каждом.В начале моего первого цикла for
я проверяю, есть ли у этого файла имя, если у него нет имени, я предполагаю, что поле оставлено пустым и равно NULL
, поэтому я говорю циклу пропустить этои continue
.
Когда я в цикле, я просто сопоставляю свои директивы загрузки с соответствующим полем формы, используя простое условие.Остальное должно быть достаточно самоочевидным, если вы увлекаетесь Zend.
Надеюсь, это поможет кому-то еще, что было в моем затруднительном положении.Если вы гуру Zend, возможно, вы можете прокомментировать мое решение или исправить ошибку, которая вызывает проблему.Возможно, есть более «зендский» способ сделать это, но он работает сейчас, и это чертовски хорошо.
Ссылки
Почему я думал, что это была цепочка метода addFilter()
,см. примечание в Примере № 3 (ниже):
Примечание. Обратите внимание: несмотря на то, что установка одного и того же фильтра допускается несколько раз, это может привести к проблемам при использовании разных параметров для одного и того же фильтра.
http://framework.zend.com/manual/1.11/en/zend.file.transfer.filters.html
Случайная статья в блоге, которая вдохновила меня на попытку изолировать каждого из них, я называю это «загрузка директивы», хотя я не уверен, что это такПозвонил:
http://www.pc -freak.net / blog / tag / upload-несколько-файлов-из-формы-с-zend-framework-zf-storing-uploaded-zf-files-с-уникальное имя /