Estoy peleándome con el componente form de Symfony2 (utilizo Silex) y tras bastante Googlear y probar muchas cosas, he decidido exponer aquí mi problema, por si alguien me pudiera iluminar.
Estoy programando una web de compras, y a la hora de mostrar el carrito necesito que a cada item se le asocie un formulario en el que el cliente pueda modificar la cantidad del item comprado y eliminarlo también.
Si lo hago con php a pelo no hay problema, es un problema bastante fácil, pero con el componente de Symfony no sé que debo hacer, en principio pienso que es un formulario de tipo Collection, ya que cada uno de los items necesita su widget.
La clase que hice es la siguiente:
Código PHP:
class Quantity extends AbstractType{
public $cart;
public $id = array();
public $cantidad = array();
function __construct($cart)
{
$this->cart = $cart;
foreach ($this->cart as $id => $cantidad) {
$this->id[] = $id;
$this->cantidad[] = $cantidad;
}
}
public function buildForm(FormBuilderInterface $builder, array $options){
$builder->add('id', 'collection', array(
'type' => 'hidden', 'options' => array(
'attr' => array('value' => (string)$this->id),
)));
$builder->add('quantity', 'collection', array(
'type' => 'integer', 'options' => array(
'attr' => array('value' => (int)$this->cantidad),
)));
$builder->add('delete', 'collection', array(
'type' => 'integer', 'options' => array(
'attr' => array('value' => 0),
)));
}
public function getName(){
return "quantityform";
}
}
En el controlador tengo esto:
Código PHP:
$cart = $app['session']->get('cart');
$quantityForm = $app['form.factory']->create(new Quantity($cart));
Código PHP:
{% for producto in cesta.productos %}
{{ form_widget(quantityForm.id) }}
{{ form_widget(quantityForm.quantity) }}
{{ form_widget(quantityForm.delete) }}
{{ form_rest(quantityForm) }}
{% endfor %}