Symfony2 数据不会更新
Symfony2 Data won't update
我有一个实体,我正尝试通过表单更新它。数据被获取但在提交时不会保留。这是控制器(通常在控制器外部断开,但出于此测试目的,我将其移入):
/**
* @Security("has_role('ROLE_QC')")
* @Route("/ar20000/{articleNumber}/edit", requirements={"articleNumber": "\d+"})
*/
public function editAction($articleNumber, Request $request) {
$em = $this->getDoctrine()->getManager();
$article20000information = $em->getRepository('RegenerysQMSBundle:Article20000Information')->findIndividual($articleNumber);
if (!$article20000information) {
throw $this->createNotFoundException(
'No art ' . $articleNumber
);
}
$form = $this->createFormBuilder($article20000information)
->add('articleNumber')
->add('description')
->add('manufacturer', 'entity', array('class' => 'RegenerysQMSBundle:Organisation', 'choice_label' => 'name', ))
->add('manufacturerCatalogueNumber')
->add('supplier', 'entity', array('class' => 'RegenerysQMSBundle:Organisation', 'choice_label' => 'name',))
->add('supplierCatalogueNumber')
->add('secondarySupplier','entity', array('class' => 'RegenerysQMSBundle:Organisation', 'choice_label' => 'name', 'empty_value' => 'None', 'required' => false))
->add('secondarySupplierCatalogueNumber')
->add('countedAs')
->add('amountInsideCounted')
->add('purchasedAs')
->add('price')
->add('whereToFindCertificates')
->add('submit', 'submit')
->getForm();
$form->handleRequest($request);
if ($form->isValid()) {
$em->flush();
return $this->redirectToRoute('regenerys_qms_article20000information_individual', array('articleNumber' => $articleNumber) );
}
$build['form'] = $form->createView();
return $this->render('forms/article20000Information.html.twig', $build);
}
这是 findIndividual
的实体存储库:
public function findIndividual($articleNumber)
{
return $this->getEntityManager()
->createQuery(
'SELECT
A.articleNumber,
A.description,
B.name as manufacturer,
A.manufacturerCatalogueNumber,
C.name as supplier,
A.supplierCatalogueNumber,
D.name as secondarySupplier,
A.secondarySupplierCatalogueNumber,
A.countedAs,
A.amountInsideCounted,
A.purchasedAs,
A.price,
A.whereToFindCertificates
FROM
RegenerysQMSBundle:Article20000Information A
LEFT OUTER JOIN RegenerysQMSBundle:Organisation B WITH B.id = A.manufacturer
LEFT OUTER JOIN RegenerysQMSBundle:Organisation C WITH C.id = A.supplier
LEFT OUTER JOIN RegenerysQMSBundle:Organisation D WITH D.id = A.secondarySupplier
WHERE
A.articleNumber = :articleNumber'
)->setParameter('articleNumber', $articleNumber)
->getSingleResult();
}
我的树枝模板很简单:
{{ form_start(form) }}
{{ form_widget(form) }}
{{ form_end(form) }}
我一定是遗漏了一些明显的东西,但我没有看到。我执行的其他类似操作都很好。
我有答案。
我比较了两个我认为相同的控制器,但有一个关键区别 - 我选择的 find
方法。一个是 find($id)
,另一个是我存储库中的一些自定义 DQL。
我不能为这个使用 $id
但有一个漂亮的方法可以根据你想要的任何东西提取单个结果,所以在我的例子中 findOneByArticleNumber($articleNumber)
我有一个实体,我正尝试通过表单更新它。数据被获取但在提交时不会保留。这是控制器(通常在控制器外部断开,但出于此测试目的,我将其移入):
/**
* @Security("has_role('ROLE_QC')")
* @Route("/ar20000/{articleNumber}/edit", requirements={"articleNumber": "\d+"})
*/
public function editAction($articleNumber, Request $request) {
$em = $this->getDoctrine()->getManager();
$article20000information = $em->getRepository('RegenerysQMSBundle:Article20000Information')->findIndividual($articleNumber);
if (!$article20000information) {
throw $this->createNotFoundException(
'No art ' . $articleNumber
);
}
$form = $this->createFormBuilder($article20000information)
->add('articleNumber')
->add('description')
->add('manufacturer', 'entity', array('class' => 'RegenerysQMSBundle:Organisation', 'choice_label' => 'name', ))
->add('manufacturerCatalogueNumber')
->add('supplier', 'entity', array('class' => 'RegenerysQMSBundle:Organisation', 'choice_label' => 'name',))
->add('supplierCatalogueNumber')
->add('secondarySupplier','entity', array('class' => 'RegenerysQMSBundle:Organisation', 'choice_label' => 'name', 'empty_value' => 'None', 'required' => false))
->add('secondarySupplierCatalogueNumber')
->add('countedAs')
->add('amountInsideCounted')
->add('purchasedAs')
->add('price')
->add('whereToFindCertificates')
->add('submit', 'submit')
->getForm();
$form->handleRequest($request);
if ($form->isValid()) {
$em->flush();
return $this->redirectToRoute('regenerys_qms_article20000information_individual', array('articleNumber' => $articleNumber) );
}
$build['form'] = $form->createView();
return $this->render('forms/article20000Information.html.twig', $build);
}
这是 findIndividual
的实体存储库:
public function findIndividual($articleNumber)
{
return $this->getEntityManager()
->createQuery(
'SELECT
A.articleNumber,
A.description,
B.name as manufacturer,
A.manufacturerCatalogueNumber,
C.name as supplier,
A.supplierCatalogueNumber,
D.name as secondarySupplier,
A.secondarySupplierCatalogueNumber,
A.countedAs,
A.amountInsideCounted,
A.purchasedAs,
A.price,
A.whereToFindCertificates
FROM
RegenerysQMSBundle:Article20000Information A
LEFT OUTER JOIN RegenerysQMSBundle:Organisation B WITH B.id = A.manufacturer
LEFT OUTER JOIN RegenerysQMSBundle:Organisation C WITH C.id = A.supplier
LEFT OUTER JOIN RegenerysQMSBundle:Organisation D WITH D.id = A.secondarySupplier
WHERE
A.articleNumber = :articleNumber'
)->setParameter('articleNumber', $articleNumber)
->getSingleResult();
}
我的树枝模板很简单:
{{ form_start(form) }}
{{ form_widget(form) }}
{{ form_end(form) }}
我一定是遗漏了一些明显的东西,但我没有看到。我执行的其他类似操作都很好。
我有答案。
我比较了两个我认为相同的控制器,但有一个关键区别 - 我选择的 find
方法。一个是 find($id)
,另一个是我存储库中的一些自定义 DQL。
我不能为这个使用 $id
但有一个漂亮的方法可以根据你想要的任何东西提取单个结果,所以在我的例子中 findOneByArticleNumber($articleNumber)