Utilizzo di form per filtro dei dati

15 views
Skip to first unread message

Luca saba

unread,
Jul 6, 2018, 2:03:51 PM7/6/18
to symfo...@googlegroups.com
Ciao a tutti!
La lista sta diventando silenziosa....immagino ormai si usi principalmente stackoverflow...
Ci provo lo stesso!

Allora: sto usando dei form per filtrare dei dati. Uno dei campi del form è un EntityType.
Qualcosa del tipo:
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('utente', EntityType::class, array(
'required' => false,
'class' =>'Epod4\AppBundle\Entity\Utente'
));
}
Quando effettuo la ricerca, mi salvo i parametri del form inviato in questo modo:
$request->getSession()->set('filtro.eventi_log.ricerca', $filtro->getData());
In questo modo, se nel controller arrivo tramite una get, mi ricarico l'ultima ricerca:
$filtro->setData($request->getSession()->get('filtro.eventi_log.ricerca'));
Facendo così, però, ho il seguente errore:
Entity of type "Epod4\AppBundle\Entity\Utente" passed to the choice field must be managed. Maybe you forget to persist it in the entity manager?

Il problema sembra scatenarsi dal fatto che l'oggetto salvato in sessione non è più 'legato' all'ORM. quindi
vendor/symfony/symfony/src/Symfony/Bridge/Doctrine/Form/ChoiceList/DoctrineChoiceLoader.php 
Esegue $values[$i] = (string) $this->idReader->getIdValue($object);
che restituisce l'errore di cui sopra.

Esiste una scorciatoia o devo ritoccare a mano il transformer oppure gestire la serializzazione dell'oggetto quando lo salvo in sessione ?
Oppure c'è qualcosa che mi sfugge ?

Grazie a tutti per l'attenzione

Luca

--
It is easier to move a problem around (for example, by moving the problem to a different part of the overall network architecture) than it is to solve it.
6th truth - rfc1925
------------------------------------------------------------------
Einstein: Imagination is more important than knowledge. For knowledge is limited, whereas imagination embraces the entire world, stimulating progress, giving birth to evolution.
------------------------------------------------------------------
Heinlein: Specialization is for Insects

Luca Genuzio

unread,
Jul 7, 2018, 5:59:46 AM7/7/18
to symfo...@googlegroups.com
Ciao, 
io salverei in sessione solo l'id di Utente, e poi recupererei l'entity dall'id salvato per passarla al setData.

Luca

--
Hai ricevuto questo messaggio perché sei iscritto al gruppo "symfony-it" di Google Gruppi.
Visita questo gruppo all'indirizzo https://groups.google.com/group/symfony-it.

Massimiliano Arione

unread,
Jul 9, 2018, 3:34:38 AM7/9/18
to symfony-it
Prova a indagare sulla serializzazione.
Tutto il resto dovrebbe essere gestito in modo automatico da Symfony, faccio una cosa simile da anni senza problemi

ciao
M.

Luca saba

unread,
Jul 9, 2018, 5:20:50 AM7/9/18
to symfo...@googlegroups.com
Mi sa che sarò costretto ad usare un miz di quanto suggerito da Luca Genuzio e da Massimiliano...
Quando salvo l'entità in sessione, perde il collegamento con l'Object Manager. Perciò, quando ricarico i dati nel form, prendendoli dalla sessione, mi da l'errore.
A riprova di questo, ho provato il seguente codice:
$data = $request->getSession()->get('filtro.delibere.ricerca');
foreach ($data as $key => $value) {
if($value) {
if($key == 'utente') {
$value = $this->getDoctrine()->getManager()->getRepository('AppBundle:Utente')
->find($value->getId());
}
$filtro->get($key)->setData($value);
}
}
Che funziona...
In pratica gli sto dicendo, di recuperare l'oggetto che già possiedo, direttamente dal DB e passarlo come dato al filtro...
Così il codice funziona :(

Vedo comunque se riesco a trovare qualcosa di più....automatico

Grazie a tutti

Luca

--
Hai ricevuto questo messaggio perché sei iscritto al gruppo "symfony-it" di Google Gruppi.
Visita questo gruppo all'indirizzo https://groups.google.com/group/symfony-it.
Reply all
Reply to author
Forward
0 new messages