我有2个表单(插入控制器),它依赖于2个实体,关系为1:n。 第一个(Orders)将一些数据(POST)发送到第二个(Orders_detail);我的目的是为一个提供商创建一个购买,所以在第一个表单中我必须选择一个提供商,将我带到第二个表单,我从他那里选择一个产品。 当我坚持使用DB时,除了id_provider之外,所有数据都会持续存在,因为它是通过POST发送的,所以我不知道为什么。 我试图从$ form和其他方式访问它,但它启动错误,因为它需要是Proveedores的实例(另一个实体取决于)。您可以在此处查看关系架构https://1drv.ms/f/s!Av9T-u6UurJJ5Gu1cLoLiIHGLbDm 感谢
CONTROLLER
public function new2Action(Request $request)
{
$pedidos= new Pedidos();
$form=$this->createFormBuilder($pedidos)
->setAction($this->generateUrl('pedidosDetalle_new2'))
->setMethod('POST')
->add('idProveedor')
->add('id', HiddenType::class)
->getForm();
return $this->render('ComprasBundle:pedidos:new2.html.twig', array(
'form'=>$form->createView(),
));
}
public function detallesNew2Action(Request $request, $id)
{
$pedidosDetalle= new Pedidos_detalle();
$pedidos=new Pedidos();
$form=$this->createFormBuilder($pedidosDetalle)
->setAction($this->generateUrl('pedidosDetalle_new2'))
->setMethod('POST')
->add('seleccionarProducto','checkbox', array(
'mapped'=>false))
->add('idProducto')
->add('cantidadPedida')
->add('observaciones')
->add('idPedido', HiddenType::class)
->getForm();
$form->handleRequest($request);
$em=$this->getDoctrine()->getManager();
if ($form->isValid()){
//
$pedidos->setFechaPedido(new \DateTime('now'));
$pedidos->setFechaEntregaPrevista(new \DateTime('now'));
$pedidos->setResponsableCompra($this->getUser());
$pedidos->setEntregado(false);
$pedidos->setIdProveedor($pedidos->getIdProveedor()); THIS DONT WORK (Catchable Fatal Error: Argument 1 passed to Cocina\ComprasBundle\Entity\Pedidos::setIdProveedor() must be an instance of Cocina\ComprasBundle\Entity\Proveedores, null given, called in C:\xampp\htdocs\Cocina\src\Cocina\ComprasBundle\Controller\PedidosController.php on line 225 and defined)
$em->persist($pedidos);
$em->persist($pedidosDetalle);
$em->flush();
$flashBag = $this->get('session')->getFlashBag();
$flashBag->add('success', 'Pedido guardado');
}
$fechaEntrega=$request->get('fechaEntrega');
$fechaPedido=$request->get('fechaPedido');
return $this->render('ComprasBundle:pedidos:Detallesnew2.html.twig', array(
'form'=>$form->createView(),
'fechaEntrega'=>$fechaEntrega,
'fechaPedido'=>$fechaPedido
));
}
ENTITY PEDIDOS
class Pedidos
{
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORM\ManyToOne(targetEntity="Cocina\ComprasBundle\Entity\Proveedores")
*/
private $idProveedor;
...
/**
* Set idProveedor
*/
public function setIdProveedor(\Cocina\ComprasBundle\Entity\Proveedores $idProveedor)
{
$this->idProveedor = $idProveedor;
return $this;
}
/**
* Get idProveedor
*
* @return string
*/
public function getIdProveedor()
{
return $this->idProveedor;
}
...
public function __toString(){
return $this->id;
}
ENTITY PEDIDOS_DETALLE
class Pedidos_detalle
{
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORM\ManyToOne(targetEntity="Cocina\ComprasBundle\Entity\Pedidos")
*/
private $idPedido;
/**
* @ORM\ManyToOne(targetEntity="Cocina\ComprasBundle\Entity\Productos")
*/
.......
/**
* Set idPedido
*/
public function setIdPedido(\Cocina\ComprasBundle\Entity\Pedidos $idPedido)
{
$this->idPedido = $idPedido;
}
/**
* Get idPedido
*
* @return string
*/
public function getIdPedido()
{
return $this->idPedido;
}
.....
public function __toString(){
return $this->id;
}
答案 0 :(得分:0)
我希望我能正确理解你的问题。所以我认为在我看来你只需要使用一个表单并设置一个与另一个表单(Collection)的关系,并将该表单用作子表单。
对于此解决方案,您可以在第一个表单中使用CollectionType
并参考另一个表单。
https://symfony.com/doc/current/form/form_collections.html
然后您可以使用表单和实体,但是您必须仅保留主表单。当你再渲染第一个表格时,第二个表格也会渲染。
使用Boostrap Bundle中的BootstrapCollection类型,您可以做更多事情。