fo_otman
@fo_otman
Веб-разработчик

Как редактировать сущность с полем типа Файл?

Есть сущность Project, она связана с сущностью Document через поле documentation связью OneToMany.
/**
     * @ORM\OneToMany(targetEntity="App\Entity\Document", mappedBy="project")
     */
    private $documentation;

    public function __construct()
    {
        $this->documentation = new ArrayCollection();
    }

Document - это просто хранилище для загруженных файлов, в этой таблице указан путь к файлу, кто загрузил, тип и пр. Форма для Project выглядит так:
class ProjectType extends AbstractType {
    public function buildForm(FormBuilderInterface $builder, array $options) {
        $builder
            ->add('name')
            ->add('documentation', FileType::class, [
                'data_class' => null,
                'mapped'     => false,
            ]);
    }

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

Обрабатываю результат формы так:
/**
     * @Route("/new", name="project_new", methods={"GET","POST"})
     */
    public function new(Request $request): Response
    {
        $project = new Project();

        $form = $this->createForm(ProjectType::class, $project);
        $form->handleRequest($request);

        if ($form->isSubmitted() && $form->isValid()) {
            $document = new Document();
            $uploadedFile = $form['documentation']->getData();
            $document->setFile($uploadedFile);
            $document->setUploadDir($this->getParameter('kernel.root_dir') . $this->getParameter('upload_directory'));
            $document->setPath($this->getParameter('upload_directory'));
            $document->upload();
            $project->addDocumentation($document);
            $em = $this->getDoctrine()->getManager();
            $em->persist($project);
            $em->persist($document);
            $em->flush();

            return $this->redirect($this->generateUrl('project_index'));
        }
        $user = $this->getUser();
        return $this->render('project/new.html.twig', array(
            'form' => $form->createView(),
            'user' => $user,
        ));
    }

Вопрос:
1. Как редактировать Project? Сейчас там не отображается файл. Я не могу его заменить или удалить.
2. Как сделать множественную загрузку файлов?
Прошу не использовать разные бандлы, хочется понять процесс на чистом Symfony.
  • Вопрос задан
  • 65 просмотров
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы