Ho delle caselle di controllo e voglio trovare gli elementi con caselle di controllo spuntate e inviarli solo al database. Così ho fatto questo:Utilizzo dell'evento modulo di Symfony per rimuovere alcuni dei dati inviati a un modulo
class NotNeededFieldsSubscriber implements EventSubscriberInterface
{
public static function getSubscribedEvents()
{
return array(FormEvents::PRE_BIND => 'preBindData');
}
public function preBindData(FormEvent $event)
{
$data = $event->getData();
$count = count($data['items']);
for ($i=0; $i < $count; $i++){
if (!array_key_exists('enabled', $data['items'][$i])){
unset($data['items'][$i]);
}
}
$event->setData($data);
}
}
Quando provo a vedere $ event-> getData ha esattamente quello che voglio.
In controllore:?!
$form = $this->formFactory->create(new ItemType(), $item);
if ($request->isMethod('POST')) {
$form->bind($request);
if ($form->isValid()) {
$this->em->persist($item);
$this->em->flush();
}
}
return $this->redirect($this->router->generate('home'));
Il problema è che gli elementi ancora controllati e non controllati sono nel database :(
Tutte le idee perché e come risolvere questo problema Grazie mille in anticipo :)
Vi siete tenuti caso entro ItemType stessa? http://symfony.com/doc/current/cookbook/form/dynamic_form_modification.html#adding-an-event-subscriber-to-a-form-class – stefancarlton
Sì, ho :(Funziona, l'array di dati è corretto , ma quando controllo il controller, $ item ha ancora tutti i dati: – Faery
ah, stai modificando un record? Disattivando i dati come rimuovendolo non lo sovrascrivi. , con $ dati ['articoli'] [$ i] = 0; – stefancarlton