Gruppo: http://groups.google.com/group/symfony-it/topics
- errore accesso variabili in twig dopo modifica al repository [8 aggiornamenti]
- E se ci sono troppe migrations? [2 aggiornamenti]
zero <tecla...@gmail.com> Jun 17 05:56AM -0700
Come accenato nel titolo ho un errore nel template dopo aver modificato il
repo della mia entità ebook, l'errore e il seguente:
Key "slug" for array with keys "0" does not exist in
/home/trovasiracusa/public_html/zbook.zz/dev-www/src/Zlab/EbookBundle/Resources/views/Default/ebook.html.twig
at line 15
Non conoscendo symfony (stò sperimentando da 2/3 mesi a tempo perso) e
sopratutto avendo lasciato qst mestier nel 2001 non sempre riesco a
risolvere gli errori che mi si presentano, così ad intuito sembra che il
template o non riceve l'oggetto ebook, o lo riceve con l'indice
sbagliato(possibile?), cmq un aiuto è gradito....
Per dovere di cronaca, nel primo caso, quello funzionante ho il controller
con all'interno la chiamata "classica" al repo "findOneBy" e la view twig a
cui passo $ebook ... e tutto funziona
nel secondo caso ho il controller con la chiamate alla funzione custom
"getActiveEbooks2($slug)" nel repo, e la stessa identica view a cui passo
l'oggetto $ebook.. e non funziona e genera l'errore indicato sopra.
Al verificarsi dell'errore la toolbar di symfony indica la query senza
nessun errore (rows =1,), ed effettivamente verificandola in phpmyadmin
funziona,
e sparando un rozzo var_dump($ebook) nel controller dopo la chiamata al
repo vedo i dati dell'ebook (insieme a tutto il resto)
poi però nel template.... errore
http://pastebin.com/RCtgvrbD qui ho postato il cod controller, repo, e
view. che dire... a presto e grazie.
PS. entità ebook è in relazione con category, nel repo ho aggiunto una
inner join (per passare da 10 query a 1), ma non credo sia questo a
generare l'errore
leonardo proietti <leonardo...@gmail.com> Jun 17 03:01PM +0200
>nel secondo caso ho il controller con la chiamate alla funzione custom
"getActiveEbooks2($slug)"
che ti torna un array ;-)
zero <tecla...@gmail.com> Jun 17 06:19AM -0700
Provato già con la sintassi suggerita qui
http://stackoverflow.com/questions/14198960/twig-array-access , stesso
errore..
Cmq. grazie.
Il giorno lunedì 17 giugno 2013 15:01:26 UTC+2, leonardo ha scritto:
zero <tecla...@gmail.com> Jun 17 08:07AM -0700
Il giorno lunedì 17 giugno 2013 15:01:26 UTC+2, leonardo ha scritto:
zero <tecla...@gmail.com> Jun 17 08:28AM -0700
Il bello di scrivere software per se stessi..... non avere scadenze,
red-line, step da inseguire ecc ecc.
Per ora ho decommentato il codice relativo al findOneBy e commentato la
chiamata al repo e va + che bene.... poi ci ritornerò.
Volevo avere però delle delucidazioni..... sul comportamento di symfony in
merito al codice che ho postato.
partendo da questo:
public function getActiveEbooks2( $slug = null)
{
$qb = $this->createQueryBuilder('e');
$qb->select(array('e','c'))
->innerJoin('e.category', 'c')
->where('e.is_actived = :active')
->setParameter('active', 1)
->andWhere('c.is_actived = :c_actived')
->setParameter('c_actived', 1)
->orderBy('e.title', 'DESC');
if($slug)
{
$qb->andWhere('e.slug = :ebook_slug')
->setParameter('ebook_slug', $slug);
}
$query = $qb->getQuery();
return $query->getResult();
}
Allora il la funzione del repositori è sempre la stessa il controller è 1
solo,
nella prima action la chiamo così:
getActiveEbooks2()
Senza parametri e la esegue fino all' OrderBy e sopratutto restituisce un
oggetto che nella view userò ebook.title o ebook.slug
nella seconda action chiamerò la funzione con il parametro così:
getActiveEbooks2( $slug )
ora la domanda è per quale motivo l'aggiunta della clausola where o meglio
della sua esecuzione (nel primo caso viene saltata non essendoci parametro
nella chiamata alla funzione) dovrebbe restituirmi un array e non un
oggetto come lo decide?
Ripeto sono nuovo in symfony e anche parecchio arrugginito in fatto di
programmazione, forse mi sfugge qual'cosa..... questo comportamento è la
norma?
Il giorno lunedì 17 giugno 2013 15:19:55 UTC+2, zero ha scritto:
Massimiliano Arione <gara...@gmail.com> Jun 17 08:32AM -0700
La risposta è semplice e avresti dovuto capirla da solo, quando Leo ha
detto che il metodo che usi ora ti restituisce un array.
Quello di prima, che prova a inviarti un suggerimento subliminale tramite
il nome di "findOneBy" (ONE!), restituisce un singolo risultato.
Dunque nel primo caso hai un singolo oggetto, nel secondo invece dovrai
ciclare un array di oggetti e dentro a ogni ciclo avrai lo stesso oggetto
di prima (che poi sia esattamente lo stesso non sono sicuro, visto la
select che hai messo)
ciao
Massimiliano
zero <tecla...@gmail.com> Jun 17 09:02AM -0700
Giusto, ma anche quando la uso getActiveEbooks2($slug) nella debug toolbar
di symfony vedo row = 1 e la stessa query del debug in phpmyadmin da 1 riga
di risultato (chiedo nella tabella ebook 1 libro in base allo slug e join
su category in base a category_id, la tabella ha 18 righe in totale)
solo che mi restituisce un array.
Il giorno lunedì 17 giugno 2013 17:32:30 UTC+2, Massimiliano Arione ha
scritto:
zero <tecla...@gmail.com> Jun 17 09:41AM -0700
Ok... un grazie a @leonardo per la prontezza e @massimiliano per la
concretezza effetivamente anche se la query da un risultato ci vuole sempre
il ciclo for.
Il giorno lunedì 17 giugno 2013 18:02:42 UTC+2, zero ha scritto:
eux <eux...@gmail.com> Jun 17 12:56AM -0700
ciao Simone,
> Ogni feature viene eseguita in sequenza e c'è quindi "memoria" degli
scenari precedenti. A questo punto voglio essere
> certo di conoscere l'id dei record appena creati.
questa frase mi fa sospettare che oltre a quanto hanno detto gli altri ci
sono un paio di problemi pratici nella scrittura dei test.
Non dovresti mai fare affidamento sulle ID dei record. Dovresti fare delle
query significative sui campi per controllare o tirare fuori i record che
ti servono. In questo modo per riportare il database ad uno stato di
riutilizzabilità puoi ricaricare solo le fixtures.
Inoltre un test deve sempre lasciare il sistema nello stato in cui lo ha
trovato. Puoi usare gli hook di behat per far sì che alla fine del test il
sistema venga ripristinato.
Simone Gentili <senso...@gmail.com> Jun 17 10:43AM +0200
> questa frase mi fa sospettare che oltre a quanto hanno detto gli altri ci
> sono un paio di problemi pratici nella scrittura dei test.
Oddio, io faccio si che una feature abbia tutta una sua storia. Quindi
faccio affidamento all'ordine degli scenari che scrivo. Potrei anche fare a
meno degli id (che avrebbe molto senso). In ambito "Behat", e riguardo al
fatto di lasciare il sistema nello stato in cui lo si trova ...
Tu con test intendi "ciascun scenario"?
Se la risposta è si siamo allo stesso punto di prima: sto proprio lavorando
male.
Hai ricevuto questo messaggio perché sei iscritto al gruppo Google symfony-it.
--
Puoi inviare post tramite email.
Per annullare l'iscrizione a questo gruppo, invia un messaggio vuoto.
Per ulteriori opzioni, visita questo gruppo.
Hai ricevuto questo messaggio perché sei iscritto al gruppo "symfony-it" di Google Gruppi.
Visita questo gruppo all'indirizzo http://groups.google.com/group/symfony-it.