Как изменить имя изображения перед загрузкой в Zend Framework 3
Я пытаюсь загрузить изображение, используя класс формы 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
Идентификатор должен быть добавлен перед загрузкой. Что-то вроде, $entity->getId() . $fileName
(Путаница: что, если я добавляю новую сущность. Там не будет id)
Во-вторых, как мне получить имя файла в контроллере после проверки формы. это
if ($form->isValid()) {
print_r($form->getData());exit();
}
Показывает старое имя.
1 ответ
У меня есть похожее приложение. Вот как я это сделал, если это поможет.
- Я не готовлюсь к загрузке, потому что, как вы упомянули, идентификатор объекта остается неопределенным до завершения создания.
- Сначала я загружаю и получаю имя изображения на сервере.
Я создаю запись в БД с именем tmp_name.
// 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)
Теперь у меня есть идентификатор объекта и имя файла. Я не изменяю имя файла в БД (приложение удовлетворено случайным именем сервера), но здесь вся информация доступна, если вам нужно.