Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
enigma83
Entusiasta Emergente
Messaggi: 1400 Iscrizione: mercoledì 2 gennaio 2008, 13:12
Messaggio
da enigma83 » venerdì 29 aprile 2016, 12:22
Buongiorno a tutti.. sto imparando symfony
Premesso che nel controller la query e la action siano corrette:
Codice: Seleziona tutto
public function countAction()
{
$query = $this->getDoctrine()->getRepository('AppBundle:Nutrizionisti')->findAll();
$foo = $query->getResult();
$count = count($foo);
return $this->render('default/index.html.twig', array('count' => $count));
}
in index.html.twig come richiamo la variabile $count?
Ultima modifica di
enigma83 il lunedì 2 maggio 2016, 15:11, modificato 1 volta in totale.
Zoff
Moderatore Globale
Messaggi: 33338 Iscrizione: mercoledì 10 ottobre 2007, 22:36
Messaggio
da Zoff » venerdì 29 aprile 2016, 12:26
enigma83
Entusiasta Emergente
Messaggi: 1400 Iscrizione: mercoledì 2 gennaio 2008, 13:12
Messaggio
da enigma83 » venerdì 29 aprile 2016, 12:31
Quindi trasformo questa:
Codice: Seleziona tutto
public function countAction()
{
$query = $this->getDoctrine()->getRepository('AppBundle:Nutrizionisti')->findAll();
$foo = $query->getResult();
$count = count($foo);
return $this->render('default/index.html.twig', array('count' => $count));
}
in :
Codice: Seleziona tutto
public function rowCount()
{
$query = $this->getDoctrine()->getRepository('AppBundle:Nutrizionisti')->findAll();
$count = $query->rowCount();
return $this->render('default/index.html.twig', array('count' => $count));
}
e in index.html.twig metto:
???
Zoff
Moderatore Globale
Messaggi: 33338 Iscrizione: mercoledì 10 ottobre 2007, 22:36
Messaggio
da Zoff » venerdì 29 aprile 2016, 12:33
No scusa, rowCount è un metodo di Statement non di Query.
Basta cambiare getResult() in getArrayResult() nel primo codice che hai postato.
enigma83
Entusiasta Emergente
Messaggi: 1400 Iscrizione: mercoledì 2 gennaio 2008, 13:12
Messaggio
da enigma83 » venerdì 29 aprile 2016, 12:36
ok fatto ma in index.html.twig cosa metto?? visto che se inserisco {{ count }} mi dice :
Variable "count" does not exist in default/index.html.twig at line 39
Zoff
Moderatore Globale
Messaggi: 33338 Iscrizione: mercoledì 10 ottobre 2007, 22:36
Messaggio
da Zoff » venerdì 29 aprile 2016, 12:48
Sicuro dia ver usato questo?
Codice: Seleziona tutto
return $this->render('default/index.html.twig', array('count' => $count));
enigma83
Entusiasta Emergente
Messaggi: 1400 Iscrizione: mercoledì 2 gennaio 2008, 13:12
Messaggio
da enigma83 » venerdì 29 aprile 2016, 12:50
public function countAction()
{
$query = $this->getDoctrine()->getRepository('AppBundle:Nutrizionisti')->findAll();
$foo = $query->getArrayResult();
$count = count($foo);
return $this->render('default/index.html.twig', array('count' => $count));
}
Zoff
Moderatore Globale
Messaggi: 33338 Iscrizione: mercoledì 10 ottobre 2007, 22:36
Messaggio
da Zoff » venerdì 29 aprile 2016, 12:52
pulisci la cache:
Codice: Seleziona tutto
php bin/console cache:clear --env=prod
php bin/console cache:clear --env=dev
enigma83
Entusiasta Emergente
Messaggi: 1400 Iscrizione: mercoledì 2 gennaio 2008, 13:12
Messaggio
da enigma83 » venerdì 29 aprile 2016, 13:00
fatto ma il problema persiste
enigma83
Entusiasta Emergente
Messaggi: 1400 Iscrizione: mercoledì 2 gennaio 2008, 13:12
Messaggio
da enigma83 » venerdì 29 aprile 2016, 13:04
x evitare dubbi ti allego il controller ed il twg
Zoff
Moderatore Globale
Messaggi: 33338 Iscrizione: mercoledì 10 ottobre 2007, 22:36
Messaggio
da Zoff » venerdì 29 aprile 2016, 13:09
Dove hai configurato la rotta?
enigma83
Entusiasta Emergente
Messaggi: 1400 Iscrizione: mercoledì 2 gennaio 2008, 13:12
Messaggio
da enigma83 » venerdì 29 aprile 2016, 14:31
non ne ho la + pallida idea
io stavo facendo questo progetto in symfony 2 poi l'ho passato ad un altro programmatore che lo ha rifatto in symfony 3.. e ora nel file routing.yml vedo solo questo:
Codice: Seleziona tutto
app:
resource: "@AppBundle/Controller/"
type: annotation
fos_user:
resource: "@FOSUserBundle/Resources/config/routing/all.xml"
e nelle altre directories non c'è nulla riferito al routing
Zoff
Moderatore Globale
Messaggi: 33338 Iscrizione: mercoledì 10 ottobre 2007, 22:36
Messaggio
da Zoff » venerdì 29 aprile 2016, 15:31
Quindi non stai caricando countAction() ma indexAction(). Tutto chiaro no?
Aggiungi questo prima di countAction():
Poi accedi alla rotta /count invece di /.
Queste però sono le basi delle basi di Symfony, tra 2 e 3 non cambia nulla.
enigma83
Entusiasta Emergente
Messaggi: 1400 Iscrizione: mercoledì 2 gennaio 2008, 13:12
Messaggio
da enigma83 » venerdì 29 aprile 2016, 15:39
saranno anche le basi ma.. 1 io ho specificato che sto imparando.. 2.. non sono convinto che ci sia bisogno di un metodo count e quindi di una rotta xkè devo semplicemente mettere un numerino in un widget della home... ovvero nella home inserire un contatore per nutrizionisti pazienti e diete.. quindi dovrei creare 3 metodi e 3 rotte.. ma le rotte non servono a specificare un percorso in cui trovare una pagina? a me la pagina è sempre la index (home ) e non c'è alcun link sul contatore... esemplifico con uno screen
Zoff
Moderatore Globale
Messaggi: 33338 Iscrizione: mercoledì 10 ottobre 2007, 22:36
Messaggio
da Zoff » venerdì 29 aprile 2016, 15:43
1. Si tratta di uno dei capitoli della guida base, se stai imparando come minimo dovrai leggere la documentazione no?
https://symfony.com/doc/current/book/routing.html
2. Ma l'hai creata tu l'action countAction, se non sei convinto che serva perché l'hai creata?
Soluzione: Copia il codice che hai messo countAction dentro indexAction e sei a posto.
enigma83
Entusiasta Emergente
Messaggi: 1400 Iscrizione: mercoledì 2 gennaio 2008, 13:12
Messaggio
da enigma83 » venerdì 29 aprile 2016, 18:01
l'ho letta la documentazione...ma come ho già scritto... è un software iniziato da un altro programmatore... e dove dovrebbero esserci le route non ci sono...
la countAction mi hai scritto tu di crearla.. e ho già copiato il codice dentro l'index e come ho scritto sopra mi da quest'errore:
Zoff
Moderatore Globale
Messaggi: 33338 Iscrizione: mercoledì 10 ottobre 2007, 22:36
Messaggio
da Zoff » venerdì 29 aprile 2016, 18:22
il metodo findAll() restituisce già un array.
Quindi:
Codice: Seleziona tutto
$elencoNutrizionisti = $this->getDoctrine()->getRepository('AppBundle:Nutrizionisti')->findAll();
$count = count($elencoNutrizionisti);
Secondo la documentazione, fin dalla versione 2.0, le rotte possono essere definite in piu' punti, tra cui le annotation (che nella documentazione è proprio il primo esempio) come evidente per indexAction, quindi le rotte sono proprio dove dovrebbero essere.
Capisco la difficoltà se non si ha dimestichezza con il framework ma in questo caso il fatto che il codice l'abbia scritto qualcun'altro su una versione piu' aggiornata non c'entra davvero nulla.
Lo trovo difficile da credere, come posso avertelo detto io se è presente già nel codice del tuo primo post di apertura?
enigma83
Entusiasta Emergente
Messaggi: 1400 Iscrizione: mercoledì 2 gennaio 2008, 13:12
Messaggio
da enigma83 » lunedì 2 maggio 2016, 15:09
ok tutto risolto.. grazie mille...
$elencoNutrizionisti = $this->getDoctrine()->getRepository('AppBundle:Nutrizionisti')->findAll();
$count = count($elencoNutrizionisti);
$elencoPazienti = $this->getDoctrine()->getRepository('AppBundle:Pazienti')->findAll();
$countpaz = count($elencoPazienti);
return $this->render('default/index.html.twig', array('count' => $count, 'countpaz' => $countpaz));
Zoff
Moderatore Globale
Messaggi: 33338 Iscrizione: mercoledì 10 ottobre 2007, 22:36
Messaggio
da Zoff » lunedì 2 maggio 2016, 15:12
Valuta però di aggiungere delle query di count, caricare in ram tutti i record solo per avere i conteggi è uno specchio di risorse ed un imbuto per le performance.
Visualizzano questa sezione: 0 utenti iscritti e 19 ospiti