我有一个上传文件的表单,我正在尝试“附加”正确的作业ID /实体,但似乎我并不完全理解表关系的概念:
我的文件类
/**
* @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");
}
提交表单以致命错误结束:
捕获致命错误:传递给AppBundle \ Entity \ File :: setJob()的参数1必须是AppBundle \ Entity \ Job的实例,给定字符串,在/ var / www / html / web2gdv / vendor / symfony /中调用第410行的symfony / src / Symfony / Component / PropertyAccess / PropertyAccessor.php已定义
我尝试用
调试发送的内容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
函数的内容是什么?
答案 0 :(得分:1)
尝试在表单中明确定义字段job
:
->add('job','entity',array(
'class'=>'AppBundle:Job',
'property'=>'id',
)
答案 1 :(得分:0)
问题是find()
返回数组,而不是Job
。使用findOne()
。
$job = $em->getRepository("AppBundle:Job")->find($form->getData()->getJob());
// $job is and Array
改为
$job = $em->getRepository("AppBundle:Job")->findOne($form->getData()->getJob());
// $job is Job
答案 2 :(得分:0)
您有添加('作业','文字'),且必须有entity类型,而不是文字
首先,您需要在数据库中拥有“作业”。然后你可以改为
$form = $this->createFormBuilder($file)
->add('file')
->add('job','entity', array('class' => 'YourBundle:Job'))
->add('save', 'submit', array('label' => 'Create Task'))
->getForm();
或短
$form = $this->createFormBuilder($file)
->add('file')
->add('job')
->add('save', 'submit', array('label' => 'Create Task'))
->getForm();
您将在工作栏上收到选择框