我正在尝试使用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
(混淆:如果我正在添加一个新实体,那将会有什么内容)
其次,在验证表单后如何在控制器中获取文件名。这个
if ($form->isValid()) {
print_r($form->getData());exit();
}
显示旧名称。
我有一个类似的应用程序。如果它有帮助,我就是这样做的。
// 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和文件名。我没有更改DB中的文件名(应用程序对服务器随机名称感到满意)但是从这里可以获得所有信息。