[Symfony] Erreur afficher article d'une catégorie

Rechercher

[Symfony] Erreur afficher article d'une catégorie

Par saturn1  -  16 reponses  -  Le 25/01/2009 15:43  -  Editer  - 

Salut j'essaie d'afficher les articles d'une catégorie quand on click sur une catégorie.

Mon erreur est :

Warning: call_user_func_array() [function.call-user-func-array]: First argument is expected to be a valid callback, 'Doctrine_Collection::getArticle' was given in C:\development\sfprojects\blog\lib\vendor\symfony\lib\view\escaper\sfOutputEscaperObjectDecorator.class.php on line 64****Warning: Invalid argument supplied for foreach() in C:\development\sfprojects\blog\apps\frontend\modules\category\templates\showSuccess.php on line 1

Pourtant il me semble bien avoir appliquer le tutoriel tout en le modifiant à ma guise pour mon blog.

Alors j'ai ceci dans le action.class.php de mo module category

public function executeShow(sfWebRequest $request)  {    $this->category = $this->getRoute()->getObject();  }

Dans mon template


Et dans mon BlogCategory.class.php


Voilà je ne comprend pas pourqu'oi cette erreur.

Merci de ton aide et désolé si ton forum se transforme en chat à cause de moi -_-.

 

Réponses apportées à cette discussion

Par Emacs  -  Le 25/01/2009 16:41  -  Haut de page  - 

Vérifie le type de $category en faisant un var_dump() dessus. Apparemment ta variable $category est en fait une collection d'objets Category et non un objet Category en lui même.

 
Par saturn1  -  Le 25/01/2009 16:51  -  Haut de page  - 

Ok j'avais déjà fais un var_dump par curiosité mais j'avais rien compris.

Cependant la première ligne est :

object(Doctrine_Collection)#74 (9) {

 

Donc comment je fais pour que sa marche stp!

 
Par Emacs  -  Le 25/01/2009 17:03  -  Haut de page  - 

Tu as bien un objet Doctrine_Collection... Peux-tu me donner la définition de ta route vers la page ainsi que le code qui te permet de récupérer ta catégorie stp ?

 
Par saturn1  -  Le 25/01/2009 17:09  -  Haut de page  - 

Ok le route c'est

category:  url:      /category/:slug  class:    sfDoctrineRoute  param:    { module: category, action: show }  options:  { model: BlogCategory, type: object }

et pour récuperer la catégorie

class BlogCategoryTable extends Doctrine_Table{  public function getCategory() {    $q = $this->createQuery('c');        return $q->execute();  } }

Mais la ce code sert à sélectionner toutes les catégories -_-.

Merci de ton aide !

 
Par saturn1  -  Le 25/01/2009 17:15  -  Haut de page  - 

Ok j'ai compri, j'ai renommé cette fonction en getAllCategory.

Maintenant je dois faire une fonction getCategory , mais dans le where je met quoi stp !

 
Par Emacs  -  Le 25/01/2009 17:27  -  Haut de page  - 

Déjà commence par renommer ta fonction par getAllCategories(), ce qui a plus de sens au pluriel dans la mesure où tu vas récupérer une collection d'objets.

Ensuite, remplace la définition de ta route par celle-ci :

category:  url:      /category/:slug  param:    { module: category, action: show }

Puis dans ta classe BlogCategoryTable, tu ajoutes cette méthode :

public function getCategoryBySlug($slug){  return $this->createQuery('c')           ->where('c.slug = ?', $slug)           ->fetchOne();}

Enfin dans ta méthode executeShow() de ton module category, tu fais :

public function executeShow(sfWebRequest $request){  $this->category = Doctrine::getTable('BlogCategory')->getCategoryBySlug($request->getParameter('slug'));  $this->forward404Unless($this->category);}

Ca devrait ensuite marcher.

++

 
Par saturn1  -  Le 25/01/2009 17:42  -  Haut de page  - 

Tu me croiras pas, mais j'ai toujours une erreur.

La première ligne du var_dump est maintenant

object(Doctrine_Query)#63 (35) {

Sinon j'ai enlevé le fetchOne.

Je vois pas quoi faire, l'erreur est :

Warning: call_user_func_array() [function.call-user-func-array]: First argument is expected to be a valid callback, 'Doctrine_Query::getArticle' was given in C:\development\sfprojects\blog\lib\vendor\symfony\lib\view\escaper\sfOutputEscaperObjectDecorator.class.php on line 64 Warning: Invalid argument supplied for foreach() in C:\development\sfprojects\blog\apps\frontend\modules\category\templates\showSuccess.php on line 1

 

Merci :)

 

 
Par Emacs  -  Le 25/01/2009 18:00  -  Haut de page  - 

Pourquoi enlèves-tu le fetchOne() ?

 
Par saturn1  -  Le 25/01/2009 18:13  -  Haut de page  - 

Car le fetchOne c'est pour transformer en tableau mais moi je l'utilise en tant qu'objet.

Et avec le fetchOne sa faisait une erreur fatal en plus.

 

 
Par Emacs  -  Le 25/01/2009 18:24  -  Haut de page  - 

Remplace fetchOne() par findOne()

 
Par saturn1  -  Le 25/01/2009 18:28  -  Haut de page  - 

 

Fatal error: Call to undefined method Doctrine_Query::findOne() in C:\development\sfprojects\blog\lib\model\doctrine\BlogCategoryTable.class.php on line 16

C'est en forgeant qu'on devient forgeron... :p

 
Par Emacs  -  Le 25/01/2009 18:40  -  Haut de page  - 

Tu peux encore faire plus simple en fait. Supprime la méthode getCategoryBySlug() et dans ton actions.class.php, tu fais ça :

public function executeShow(sfWebRequest $request){  $this->category = Doctrine::getTable('BlogCategory')->findOneBySlug($request->getParameter('slug'));  $this->forward404Unless($this->category);}

++

 
Par saturn1  -  Le 25/01/2009 18:48  -  Haut de page  - 

Hum sa marche c'est cool!

Mais crois pas que tu vas te reposé je vais m'attaqué à la pagination bientôt sa va être un massacre lol :p.

Mais en faite en ayant pratiqué un peu symfony les deux avantages que je vois ce sont :

  • les tests (une application professionnelle ne peut se passer de cela)

  • la génération automatique du quaternaire (show/edit/delete/add).

Merci, mais cependant j'ai trouvé un défaut .

Dans la doc il n'y a pas un super moteur de recherche comme sur le site de php ou tu tapes le nom d'une fonction et il t'affiche comment elle marche. Là on est obligé de chercher à la main et j'ai toujours pas compris comment fonctionner la doc.

 
Par Emacs  -  Le 25/01/2009 18:54  -  Haut de page  - 

Pour Doctrine, la vraie documentation se trouve ici : http://www.doctrine-project.org/documentation/manual/1_0/en/one-page

Le menu de droite est suffisant explicite pour comprendre où aller chercher rapidement de l'information. Et puis à coups de CTRL + F, on trouve vite ce que l'on veut.

Tu peux aussi regarder la doc technique de l'API pour prendre connaissance des méthodes disponibles dans chaque classe.

Enfin pour la pagination, tu as tout dans le tutoriel Jobeet ainsi que dans la documentation de Doctrine ;)

 
Par saturn1  -  Le 25/01/2009 18:58  -  Haut de page  - 

Oui je sais je me sert de jobeet pour faire mon blog en paralèlle .

Mais un truc intéressant à faire serait de chronométrer en combien d'heure ou minute on peut faire un blog avec un petit bckoffice avec symfony ^^.

 
Par Emacs  -  Le 25/01/2009 19:05  -  Haut de page  - 

En une demi journée ça peut être plié pour un truc de base avec catégories, articles et commentaires.

 

Ajouter une réponse à la discussion

Seuls les membres connectés sont autorisés à poster dans les forums !

Identifiez-vous
Join |  ID/MDP? |