Pues llevas razón, si quiero seguir los fundamentos del framework, debo respetarlo todo, aunque la verdad, es que no acabo de comprender el componente de formularios. Veo que tu controlas bastante, así que voy a abusar de tu conocimiento XD. Espero que dios te lo pague con una novia muy guapa XD
Supongo que debo crear dos entidades, una CartEntity y otra CartItemEntity, pero si te digo la verdad no sé como relacionarlas, esto en Symfony, con Doctrine, si se hacerlo fácilmente.
Las entidades serían así:
Código PHP:
class CartEntity
{
protected $cart;
protected $items;
public function getCart()
{
return $this->cart;
}
public function setCart($cart)
{
$this->cart = $cart;
}
public function getItems()
{
return $this->items;
}
public function setItems($items)
{
$this->items = $items;
}
}
Código PHP:
class CartItemsEntity
{
protected $id;
protected $quantity;
public function getId()
{
return $this->id;
}
public function setId($id)
{
$this->id = $id;
}
public function getQuantity()
{
return $this->quantity;
}
public function setQuantity($quantity)
{
$this->quantity = $quantity;
}
}
Los formularios quedarían así:
Código PHP:
namespace srcForm;
use SymfonyComponentValidatorConstraints as Assert;
use SymfonyComponentFormAbstractType;
use SymfonyComponentFormFormBuilderInterface;
use srcFormCartItemType;
class CartType extends AbstractType{
public $cart;
function __construct($cart)
{
$this->cart = $cart;
}
public function buildForm(FormBuilderInterface $builder, array $options){
$builder->add('items', 'collection', array( 'type' => new CartItemType($this->cart),));
}
public function getName(){
return "cartform";
}
}
Código PHP:
namespace srcForm;
use SymfonyComponentValidatorConstraints as Assert;
use SymfonyComponentFormAbstractType;
use SymfonyComponentFormFormBuilderInterface;
class CartItemType extends AbstractType{
public $cart;
public $id;
public $cantidad;
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', 'hidden', array(
'attr' => array('value' => array_keys($this->id)),
));
$builder->add('quantity', 'integer', array(
'attr' => array('value' => array_keys($this->cantidad)),
));
}
public function getName(){
return "cartitemform";
}
}
En el controlador le paso a la entity el carrito en una sesión, y luego a su vez al form.
Código PHP:
$cart = $app['session']->get('cart');
$cart_entity = new CartEntity();
$cart_entity->setCart($cart);
$form = $app['form.factory']->create(new CartType($cart), $cart_entity);
Código PHP:
{{ form_widget(form) }}
Pero no obtengo nada, como no llego a entenderlo del todo, no sé en que estoy fallando. Si alguien puede ayudarme le estaré muy agradecido. Gracias
Cita:
Iniciado por masterpuppet Que tal
Fennesz,
El tema es que el planteo no es correcto, si te apegas a los estandares del fw todo es mas sencillo te sugiero que lo hagas de la forma correcta y tengas dos entidades con dos form types, de todas formas tal cual lo tienes estas pisando en cada iteración los elementos, debería bastar con algo asi :
Código PHP:
Ver originalprotected $cart;
public function __construct($cart)
{
$this->cart = $cart;
}
public function buildForm
(FormBuilderInterface
$builder, array $options) {
$builder->add('id', 'collection', array( 'type' => 'hidden',
));
...
}
Saludos.