Есть сущность 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.