2010-03-08 11 views
1

En ce moment j'essaye de créer mon propre petit MVC (juste pour la pratique et pour comprendre les détails de modèle de MVC). Je voudrais mettre en cache des parties de pages (listes déroulantes, listes, etc.) et je ne sais pas quelle est la meilleure façon de l'organiser.MVC, comment organiser la mise en cache des parties de la page et comment être avec View?

Supposons que j'ai PostsController avec la méthode getPostDetailsShortly ($ post_id). Cette méthode pourrait ressembler à ceci ...

public function getPostDetailsShortly($post_id) { 

    if (!$post_id) return false; 
    $content = $this->memcache->get("post" . $post_id); //Trying to get post details HTML from memcache 

    if (!$content) { //Not fount in memcache 

    $model = new PostsModel(); 
    $data = $model->getPostDetailsShortly($post_id); 

    $this->view->assign('data', $data); 

    ob_start(); 
    $this->view->render(); 
    $content = ob_get_contents(); //Getting view output into variable 
    ob_end_clean(); 

    $this->memcache->set('post' . $post_id, $content, 1000); //Writing variable to memcache 

    } 

    return $content; 

} 

Maintenant, je devrais faire cette méthode du contrôleur soit disponible à partir de vues. Parce que je vais l'utiliser à l'intérieur d'autres pages, par exemple, pour la construction de la liste des messages connexes.

Quelle est la meilleure pratique de le faire? Peut-être que je me trompe et il existe de meilleures méthodes pour organiser la mise en cache des parties de pages?

PS: Désolé pour mon anglais, mais j'espère que c'est clair.

Merci!

+0

c'est comme ça que je le fais :) – webmaster

Répondre

1

L'idée derrière MVC pour ceux qui lisent peut-être ceci est de séparer les architectures MODEL, VIEW et CONTROLLER du site. Je suis le plus familier avec le framework CakePHP MVC. Donc, cette réponse sera basée sur ma connaissance de MVC en ce qui concerne CakePHP.

Étant donné que les informations que vous fournissez doivent être fournies à la vue, je suggérerais de la créer en tant qu'assistant HTML. Un assistant est conçu pour fournir un code réutilisable à la vue. Le Contrôleur est l'implémentation de la logique derrière le code (que faire avec les données provenant des formulaires sur la vue, quelles vues appeler, demander au modèle pour les données, etc.).

En examinant la question, vous parlez de la mise en cache de ces éléments. Je pense que c'est une bonne chose si vous prévoyez d'obtenir de grandes quantités de trafic, mais pas vraiment nécessaire autrement. Cela dit, il semble que la question concerne plus l'architecture que la mise en cache. L'architecture actuelle semble solide, mais je déplacerais la fonctionnalité dans un «composant» accessible depuis tous les contrôleurs. Cela vous permettra de l'appeler à partir de n'importe quel contrôleur où vous en avez besoin, sans avoir à appeler un contrôleur spécifique à chaque fois.

+0

Ouais, helpers est une très bonne solution. Je vous remercie. – Kirzilla