Я пытаюсь использовать VichImageBundle с Symfony3, пока еще нет документации для вызова типа FormType :: class, который является новым для S3 в сочетании с Vich Image Bundle. У меня все работает, кроме движущейся части.Symfony 3 VichUploaderBundle не перемещает изображения в правильный каталог
Я сделал структуру папок здесь внутри проекта здесь: Web/изображения/aod_images
Я установил конфигурацию в файле YML так:
vich_uploader:
db_driver: orm
mappings:
aod_images:
uri_prefix: /images/aod_images
upload_destination: %kernel.root_dir%/../web/images/aod_images
Свойство сущности здесь: (у меня есть методы получения и установки на месте)
/**
* @Vich\UploadableField(mapping="aod_images", fileNameProperty="dailyChartName")
*
* @var File
*/
private $dailyChart;
/**
* @ORM\Column(type="string", length=255)
*
* @var string
*/
private $dailyChartName;
/**
* @Vich\UploadableField(mapping="aod_images", fileNameProperty="twohourChartName")
*
* @var File
*/
private $twohourChart;
/**
* @ORM\Column(type="string", length=255)
*
* @var string
*/
private $twohourChartName;
Я вызываю метод установки времени по мере необходимости в классе контроллера, а именно на editAction и newAc Контроллеры Тион:
$analysis->setUpdatedAt(new \DateTime('now'));
В классе FormType для этого объекта я следующий до сих пор:
->add('dailyChartName', FileType::class, array())
->add('twohourChartName', FileType::class, array())
Я не уверен, что варианты перейти к -> добавить метод еще для каждого изображения пример.
Приложение правильно строит формы.
Когда я делаю хвост -f в dev.log я получаю следующее сообщение как часть канала doctrine.DEBUG:
(Symfony\\Component\\HttpFoundation\\File\\UploadedFile: /Applications/MAMP/tmp/php/phpEz6kJO)","13":"[object] (Symfony\\Component\\HttpFoundation\\File\\UploadedFile: /Applications/MAMP/tmp/php/phpVkbZgi)
Свойство Имя изображения не соответствует тому, что я отображается в конфигурации .yml-файл. Вместо этого путь отражает путь моих локальных машин к внутренней директории php tmp. Я запускаю это с 127.0.0.1:8000 после использования команды server: run.
Когда я смотрю в этом каталоге, изображение было перемещено NOT.
Имя (неправильное) изображение копируется в базу данных. Однако путь к изображению пуст (неправильный путь). Кроме того, правильный каталог path/также пуст.
С уважением!
EDIT
По предложению Маттео я сделал следующие изменения в файл FormType.php.
->add('dailyChart', VichFileType::class, array(
'required' => TRUE,
))
->add('twohourChart', VichFileType::class, array(
'required' => TRUE,
))
EDIT 2
В попытке сделать мою реализацию более тесно прилипать к документации, которую я кладу updatedAt установить внутри объекта в соответствии с DOCS предложение.
Мои набор методов выглядеть примерно так:
public function setDailyChart(\Symfony\Component\HttpFoundation\File\UploadedFile $dailyChart)
{
$this->dailyChart = $dailyChart;
if ($dailyChart) {
$this->updatedAt = new \DateTime('now');
}
return $this;
}
я явно установить typehinting с полным путем. Теперь я получаю следующую ошибку.
AppBundle\Entity\MTI_Cart\AodTechnicalAnalysis::setDailyChart() must be an instance of Symfony\Component\HttpFoundation\File\UploadedFile, instance of Symfony\Component\HttpFoundation\File\File given
проверить, правильно ли вы указали свой c lass с аннотацией «Загружаемый», как описано [здесь] (https://github.com/dustin10/VichUploaderBundle/blob/master/Resources/doc/usage.md#step-2-link-the-upload-mappingtoto -an-объект). Я думаю, что вы делаете, это всего лишь проверка – Matteo
Да, я убедился в этом ... @Vich \ UploadableField (mapping = "aod_images", fileNameProperty = "twohourChartName"). Я взял эту часть непосредственно со страницы, с которой вы связались. Я просто дважды проверил, что мои сопоставления здесь, на сущности, соответствуют этому в файле конфигурации. Он идеально подходит. –
/**/** * @ORM \ Entity * @Vich \ Загружаемый */ Класс Продукт – Matteo