Поле пользовательской формы Symfony недействительно
Я использую symfony 6 со всем обновленным на сегодняшний день.
Я создал тип формы, с помощью которого я намерен получить URL-адрес или изображение и внутренне преобразовать изображение в URL-адрес, который будет указывать, где он хранится на сервере, или сохранить данный URL-адрес. Идея состоит в том, чтобы иметь возможность получать один или другой (url-адрес или файл) и возвращать в качестве данных только новый URL-адрес.
Вот мой код:
родительская форма
class EditProfileForm extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options): void
{
$builder
->add('imgProfile', ImageType::class, [
'required' => false,
'label' => "Profile Image",
'bucket' => 'tw-user-files',
'key' => $options["key"],
'constraints' => [
new File([
'maxSize' => '7M',
'mimeTypes' => [
'image/*'
],
'mimeTypesMessage' => 'That is not a valid image format',
])
],
'setter' => function (User &$user, string $data, FormInterface $form): void {
$user->setImgProfile($data);
}
])
;
}
}
Тип изображения
class ImageType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$bucketName = $options["bucket"];
$bucket = $this->flySystemS3->getBucket($bucketName);
$constraints = $options["constraints"];
$builder->add('url', UrlType::class, [
'error_bubbling' => false,
'required' => false,
])
->add('file', FileType::class, [
"error_bubbling" => false,
"multiple" => false,
'required' => false,
'attr' => [
'accept' => 'image/*'
],
'constraints' => $constraints
])
->addViewTransformer(new UrlOrFileToImage($bucket, $options["key"]));
}
}
Преобразователь данных
class UrlOrFileToImage implements DataTransformerInterface
{
public function transform($value)
{
return [
"url" => "",
"file" => null
];
}
public function reverseTransform($value)
{
if (!empty($value["url"])) {
return $value;
}
if (!empty($value["file"])) {
return $this->fileToImage($value["file"]);
}
return "#";
}
private function fileToImage(UploadedFile $file): string
{
$fileName = $this->uploadToServer();
return $fileName;
}
}
ситуация такова, что при проверке родительской формы я получаю ошибку "Не удалось найти файл.", это происходит только при проверке родительской формы, дочерняя форма "ImageType" проходит все проверки и не генерирует ошибку.
Я отлаживал его шаг за шагом, и когда я его отлаживаю, он проходит правильно, проверка правильная и возвращает все в порядке. Поэтому я думаю, что это некоторая проверка, которая занимает слишком много времени, и во время отладки дает возможность проверить ее, и когда я позволяю ей запустить код, проверка не выполняется.