@ak_wi

Как передавать сохраненные данные в поле в Symfony?

У меня есть сущность POST с полем cover, которое содержит сущность - картинку
//src/Entity/Post.php
/**
     * @var Image
     * @ORM\ManyToOne(targetEntity="Image", cascade={"persist"})
     * @ORM\JoinColumn(name="cover_id", referencedColumnName="id")
     **/
    private $cover;


И когда я редактирую POST с помощью простой функции:
//src/Controller/PostController.php
  /**
     * @Route("/{id}/edit", name="post_edit", methods={"GET","POST"})
     */
    public function edit(Request $request, Post $post): Response
    {
        $form = $this->createForm(PostType::class, $post);
        $form->handleRequest($request);

        if ($form->isSubmitted() && $form->isValid()) {
            $this->getDoctrine()->getManager()->flush();

            return $this->redirectToRoute('post_index');
        }

        return $this->render('post/edit.html.twig', [
            'post' => $post,
            'form' => $form->createView(),
        ]);
    }

И формы:
//src/Form/PostType.php
class PostType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('cover', ImageType::class, array(
                'label' => 'Cover'
            ));
    }

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults([
            'data_class' => Post::class
        ]);
    }
}

//src/Form/ImagetType.php

class ImageType extends FileType
{
    private $imagePath;
    /**
     * ImageType constructor.
     * @param $imagePath
     */
    public function __construct($imagePath)
    {
        $this->imagePath = $imagePath;
    }

    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        parent::buildForm($builder, $options);
        $builder->addModelTransformer(new CallbackTransformer(
            function(Image $image = null) {
                if ($image instanceof Image) {
                    return new File($this->imagePath . '/' . $image->getFile());
                }
            },
            function(UploadedFile $uploadedFile = null) {
                if ($uploadedFile instanceof UploadedFile) {
                    $image = new Image();
                    $image->setFile($uploadedFile);
                    return $image;
                }
            }
        ));
    }

    public function getBlockPrefix()
    {
        return 'image';
    }

    public function configureOptions(OptionsResolver $resolver)
    {
        parent::configureOptions($resolver);
        $resolver->setDefaults([
            'required' => false
        ]);
    }
}


То при отправки формы поле cover (даже если оно заполнено у объекта) приходит пустым. Как сделать так, чтобы при редактировании других полей сущности Post, если в cover что-то есть, чтобы это сохранялось?

Загрузка файла позаимствована вот тут - https://github.com/cirykpopeye/easy-image-uploadin...
  • Вопрос задан
  • 76 просмотров
Пригласить эксперта
Ответы на вопрос 1
@I_Pavlov
Разработчик
Moжно выполнять "->add('cover', ... " только для формы создания, но не для формы редактирования.
Для этого можно использовать $options.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы