У меня есть форма, которая загружает файл, и я пытаюсь "прикрепить" к нему правильный идентификатор/объект задания, но, похоже, я не совсем понимаю концепцию отношений таблиц:
Мой файловый класс
/**
* @ORM\ManyToOne(targetEntity="Job", inversedBy="file")
*/
protected $job;
Мой рабочий класс:
/**
* @ORM\OneToMany(targetEntity="File", mappedBy="job")
*/
protected $file;
public function __construct()
{
$this->file = new ArrayCollection();
}
Я отправляю форму и ввожу все в базу данных:
$em = $this->getDoctrine()->getManager();
$file = new File();
$form = $this->createFormBuilder($file)
->add('file')
->add('job','text')
->add('save', 'submit', array('label' => 'Create Task'))
->getForm();
$form->handleRequest($request);
if ($form->isValid()) {
$job = $em->getRepository("AppBundle:Job")->find($form->getData()->getJob());
$file->setFile($form->getData()->getFile());
$file->setPath($form->getData()->getPath());
$file->setJob($job);
$em->persist($file);
$em->flush();
return $this->redirectToRoute("pendingJobs");
}
Отправка формы завершается фатальной ошибкой:
Уловимая фатальная ошибка: аргумент 1, переданный в AppBundle\Entity\File::setJob(), должен быть экземпляром AppBundle\Entity\Job, заданной строкой, вызываемой в /var/www/html/web2gdv/vendor/symfony/symfony/src /Symfony/Component/PropertyAccess/PropertyAccessor.php в строке 410 и определено
Я попытался отладить то, что было отправлено с помощью
if ($form->isValid()) {
dump($form->getData());
die();
}
но доходит ли до сути?!
Что я делаю неправильно?
Любая подсказка приветствуется!
ОБНОВЛЕНИЕ
Благодаря @julien-bourdic я обновил свою форму следующим образом:
/**
* @Route("/job/pending", name="pendingJobs")
*/
public function jobAction(Request $request)
{
$this->denyAccessUnlessGranted('ROLE_ADMIN', null, 'Unable to access this page!');
$em = $this->getDoctrine()->getManager();
$file = new File();
$form = $this->createFormBuilder($file)
->add('file')
->add('job','entity',array(
'class' => 'AppBundle:Job',
'choice_label' => 'id',
))
->add('save', 'submit', array('label' => 'Create Task'))
->getForm();
$form->handleRequest($request);
if ($form->isValid()) {
$job = $em->getRepository("AppBundle:Job")->find($form->getData()->getJob());
$file->setFile($form->getData()->getFile());
$file->setPath($form->getData()->getPath());
$file->setJob($job);
$em->persist($file);
$em->flush();
return $this->redirectToRoute("pendingJobs");
}
$jobs = $em->getRepository("AppBundle:Job")->findBy(array(
'receipt' => true,
'receiptStatus' => true,
));
return $this->render(
'default/pending.html.twig',
array(
'jobs' => $jobs,
'form' => $form->createView(),
)
);
}
Вся цель этого класса состоит в том, чтобы иметь таблицу, где последняя кнопка каждой строки является формой загрузки. Как я могу заполнить несколько форм из одного класса, возможно ли это? Что я должен отправить функции render
?