我有两种形式(插入控制器),它取决于2个关系1:n的实体。 第一个(Orders)发送一些数据(POST)到第二个(Orders_detail);我的意图是为一个提供商创建一个购买,所以在第一个形式中,我必须选择一个提供商,它将我带到第二个形式,以便我从他那里选择一个产品。 当我坚持数据库时,除id_provider之外的所有数据都保持不变,我不明白为什么,因为它是通过POST发送的。 我试图从$ form和其他方式访问它,但它启动一个错误,因为它要求是一个Proveedores(另一个实体取决于)的实例。你可以在这里看到的关系模式https://1drv.ms/f/s!Av9T-u6UurJJ5Gu1cLoLiIHGLbDm 感谢symfony主义不坚持一些数据
控制器
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
));
}
实体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;
}
实体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;
}
感谢您的回应Stony;我认为最好的方法就像你说的那样,事实上我之前在另一次尝试中使用了表单集合,但是我有一些验证问题,并且我决定用另一种方式来检查。这种情况是,我直觉这个问题必须有一个简单的解决方案(我怎么能得到idPedido设置它坚持行动之前?),但我不知道如何。 – viejalospelos
对不起,问题是我怎么能得到** idProveedor **在持续行动之前设置它? – viejalospelos