2010-12-03 9 views
0

Je suis nouveau sur cakePHP, et je me demande comment un site 'live' le fait.Projet cakePHP, organisation de dossiers, pages, fonctions

Je vois 2 possibilités:

1) Il y a un contrôleur avec un tas de pages (fonctions) dans son (étendu) AppController. 2) Il y a beaucoup de contrôleurs, chacun avec un petit nombre de pages (fonctions) dans son (étendu) AppController.

(Vous avez probablement déjà ma question, mais je suis va le dire d'une autre façon)

Dois-je mettre ma page de contact dans un contrôleur séparé que ma page de blog? (J'ai l'intuition que la réponse est oui.) Pourquoi?

+0

... et je ne peux pas épeler 'organisation' pour merde lol – jason

Répondre

4

Vous n'avez pas besoin de créer un contrôleur pour tout. En fait, vous ne devriez pas, parce qu'il y a de meilleurs moyens de contourner cela. Les pages les plus statiques que vous avez, le plus hors de portée qu'il peut obtenir.

pour les pages statiques

Copie pages_controller.php du gâteau/libs/dossier contrôleur vers votre application/dossier contrôleurs. Ajouter le morceau suivant de code à votre écran() Action:

function display() { 

    ... 

    $page = Inflector::slug($page); 
    if (method_exists($this, $page)) { 
     $this->$page(); 
    } 

    $this->render(join('/', $path)); 
    return; 
} 

Ensuite, modifiez votre fichier routes.php pour ajouter les différentes pages statiques:

Router::connect('/about', array('controller' => 'pages', 'action' => 'display', 'about')); 
Router::connect('/contact', array('controller' => 'pages', 'action' => 'display', 'contact')); 

Maintenant, le formulaire de contact est statique page, mais a une certaine logique qui s'y rattachent. Ainsi, vous pouvez vous diriger vers votre PagesController et créer une action spécifique pour cette (ou toute autre page qui est non seulement statique):

function contact() { 
    if (!empty($this->data)) { 
     ... 
    } 
} 

Fondamentalement, l'itinéraire dirige votre demande de page à l'action statique display() du PagesController . L'action d'affichage vérifie si une méthode du même nom existe. Si c'est le cas, il exécute cette action et affiche l'affichage pages/{page} .ctp.

Pour les pages non statiques, par ex. Blog

Maintenant, cela a certainement besoin d'un modèle. En fait, plusieurs modèles (Post hasMany Comment, Post HABTM Tag). Afin de manipuler et d'accéder à ces différents modèles, il est préférable de placer le code dans un contrôleur séparé.

Beaucoup de gens aiment nommer leurs contrôleurs en fonction de leurs URL. Par exemple, ils nomment leur contrôleur comme BlogController s'ils veulent une URL telle que /blog.

Une méthode que je préfère utilise le routage pour obtenir les URL que je veux, et garder les contrôleurs nommés selon les conventions de CakePHP.

Par exemple. Un PostsController contrôlerait le modèle Post et les modèles associés. Mais si je voulais que l'URL /blog affiche une liste de tous les messages, j'écrirais une route pour la diriger vers /posts/index.

Router::connect('/blog', array('controller' => 'posts', 'action' => 'index')); 

Vous pouvez également avoir des itinéraires supplémentaires.Exemple: /blog/2010/06/10/whats-in-a-post pour pointer vers /posts/view/.

Encore une fois, ceci est juste un exemple de ce qui est possible. En fin de compte, vous devriez vous en tenir aux méthodes qui, selon vous, aident à garder votre code organisé pour vous et votre équipe.

+0

Génial, c'est assez proche de ce que je me demandais. Une autre chose qui a aidé était quelqu'un dans un autre fil a dit «gros modèle, contrôleur maigre», et quand j'ai lu ceci j'ai eu mon «aha! moment. – jason

+0

très bonne réponse, j'en ai beaucoup appris. mieux que le gâteau-livre – yossi

+0

:) Merci! Content que cela ait aidé. – RabidFire

Questions connexes