Поле пользовательской формы 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" проходит все проверки и не генерирует ошибку.

Я отлаживал его шаг за шагом, и когда я его отлаживаю, он проходит правильно, проверка правильная и возвращает все в порядке. Поэтому я думаю, что это некоторая проверка, которая занимает слишком много времени, и во время отладки дает возможность проверить ее, и когда я позволяю ей запустить код, проверка не выполняется.

0 ответов

Другие вопросы по тегам