我正在尝试使用zend表单类上传图像,而我当前的输入过滤器是这个
$inputFilter->add([
"name" => "ImageLogo",
"required" => false,
"validators" => [
[
"name" => "FileMimeType",
"options" => [
"mimeType" => [ "image/jpeg", "image/png" ],
],
],
[
"name" => "FileIsImage",
],
],
"filters" => [
[
"name" => "FileRenameUpload",
"options" => [
"target" => getcwd() . "/public/uploads/logos",
"useUploadName" => true,
"useUploadExtension" => true,
"overwrite" => true,
"randomize" => true,
],
],
],
]);
它上传得很完美,但是我有些部分无法修改。
首先,我希望在上载$entity
之前添加其ID。 $entity->getId() . $fileName
之类的东西(困惑:如果我要添加一个新实体该怎么办。不会有id)
第二,验证表单后如何在控制器中获取文件名。
if ($form->isValid()) {
print_r($form->getData());exit();
}
显示旧名称。
答案 0 :(得分:0)
我有一个类似的应用程序。如果有帮助,这是我的操作方法。
我用tmp_name在db中创建记录。
// If form is submitted
if ($this->getRequest()->isPost()) {
// Merge form data and file data
$data = array_merge_recursive(
$this->getRequest()->getPost()->toArray(),
$this->getRequest()->getFiles()->toArray()
);
// Filter and verify form data
$form->setData($data);
// If form is valid
if ($form->isValid()) {
$data = $form->getData();
$fileNameOnServer = basename($data['ImageLogo']['tmp_name']);
// entity repository manages saving into database and return new id
$newEntityId = $this->_entityRepository->create($data);
// Here we know the entity ID and the file name on server
} else {
// Do something if form is not valid
}
}
// Do something if form is not submitted (e.g. display form)
现在我有了实体ID和文件名。我不更改数据库中的文件名(该应用程序对服务器的随机名称感到满意),但是如果需要,从这里可以获取所有信息。