errore accesso variabili in twig dopo modifica al repository

15 views
Skip to first unread message

zero

unread,
Jun 17, 2013, 8:56:30 AM6/17/13
to symfo...@googlegroups.com
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

unread,
Jun 17, 2013, 9:01:26 AM6/17/13
to symfo...@googlegroups.com
>nel secondo caso ho il controller con la chiamate alla funzione custom "getActiveEbooks2($slug)"

che ti torna un array ;-)

zero

unread,
Jun 17, 2013, 9:19:55 AM6/17/13
to symfo...@googlegroups.com, leonardo...@gmail.com
Provato già con la sintassi suggerita qui http://stackoverflow.com/questions/14198960/twig-array-access , stesso errore..
Cmq. grazie.
Message has been deleted

zero

unread,
Jun 17, 2013, 11:28:50 AM6/17/13
to symfo...@googlegroups.com, leonardo...@gmail.com
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?

Massimiliano Arione

unread,
Jun 17, 2013, 11:32:30 AM6/17/13
to symfo...@googlegroups.com
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

unread,
Jun 17, 2013, 12:02:42 PM6/17/13
to symfo...@googlegroups.com
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.

zero

unread,
Jun 17, 2013, 12:41:28 PM6/17/13
to symfo...@googlegroups.com
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.
Reply all
Reply to author
Forward
0 new messages