Bonjour à tous,
Ayant suivi l'intégralité des tutos Développer son site de A à Z, je souhaite ajouter un système de commentaires (fait main) au blog que j'ai créé. Toujours dans l'optique de m'améliorer je voudrais juste savoir si ma méthode est propre. En effet, elle fonctionne mais je ne sais pas si c'est la bonne solution pour intégrer les commentaires dans ce pattern MVC.
Voici ma démarche :
Après avoir créé le model [b]Comment[/b] et le controller [b]CommentsController[/b], j'ai dû modifier la class [b]PostController[/b].
Je lui ai ajouté un constructeur afin de surcharger celui de sa classe mère. Dans ce nouveau constructeur j'ai chargé et créer une instance de [b]CommentsController[/b] que j'ai stocké dans la classe. Voyez plutôt :
[code]
class PostsController extends Controller{
var $commentController;
/**
* Constructeur
* @param $request Objet request de notre application
**/
function __construct($request = null){
$this->Session = new Session();
$this->Form = new Form($this);
if($request){
$this->request = $request;
require ROOT.DS.'config'.DS.'hook.php';
}
$file = ROOT.DS.'controller'.DS.'CommentsController.php';
require $file;
$this->commentController = new CommentsController($this->request);
}
[/code]
Ensuite, au niveau de la fonction [b]view[/b] de la classe PostsController j'ai ajouté cette ligne qui fait appelle à la méthode [b]lister[/b] de [b]CommentsController[/b]. Cette méthode retourne la liste des commentaires liés à l'id du [b]Post[/b].
[code]
function view($id, $slug){
$this->loadModel('Post');
$d['post'] = $this->Post->findFirst(array(
'fields' => 'id, slug, content, title',
'conditions' => array('id' => $id, 'type' => 'post', 'online' => 1)
));
$d['comments'] = $this->commentController->lister($id);
if(empty($d['post'])){
$this->e404('Page introuvable');
}
if($slug != $d['post']->slug){
$this->redirect("posts/view/id:$id/slug:" . $d['post']->slug, 301);
}
$this->set($d);
}
[/code]
Avec un debug($d['comments'] je récupère bien la liste des commentaires.
Pour moi cela semble être une bonne solution. Qu'en pensez-vous ?
Je pense qu'on peut faire ça en utilisant les Fabriques aussi mais pour l'instant je ne souhaite pas aller si loin.
Merci beaucoup ;)