Bonjour à tous,

Je développe actuellement un site web selon le design pattern mvc. L'implémentation de ce patron de conception m'oblige donc à faire beaucoup de
Code php :
Sélectionner tout - Visualiser dans une fenêtre à part

header('Location:...');

pour rediriger vers ma vue après traitements.
Cependant, j'ai lu que pour une redirection permanente il fallait mieux faire un
Code php :
Sélectionner tout - Visualiser dans une fenêtre à part

<?php
 header('HTTP/1.1 301 Moved Permanently', false, 301);
 header('Location: ...');
 exit();
 ?>

dans un souci de référencement.
Ainsi, les redirections que je fais pour pouvoir implémenter ce design pattern MVC doivent elles être faite de cette manière (à savoir comme une redirection permanente) afin d'optimiser mon référencement?

Merci pour votre aide.
Salut,

le modèle MVC n'impose aucune redirection. Je pense que tu es encore loin de maitriser cela mais c'est tout à fait normal si tu débutes.

Voici un exemple très simpliste de controlleur MVC qui utilise un model et affiche une vue (sans réécriture d'url pour mieux comprendre) :

index.php?page=blog

$page = isset($_GET['page']) ? $_GET['page'] : null;
// Controller
switch($page){
    'blog' : 
         // Utilisation du modèle
         include model/blog.php;
         $posts = blog::getPosts();
         // Chargement de la vue
         include 'view/blog.php';         
         break;
    'contact' : 
         // Chargement de la vue
         include 'view/contact.php';
         break;
}


view/blog.php

<html>
    <?php foreach($posts as $post) :?>
        <div class="titre"><?php echo $post['titre']?></div>
        <div class="contenu"><?php echo $post['contenu']?></div>
    <?php endif;?>
</html>


Voila, ceci est juste pour te faire voir le principe.
Ça c'est du MVC façon Rasmus Lerdorf. Smiley lol

Blague mise à part, il n'y a aucun rapport entre MVC, redirection et référencement. Et je n'ai d'ailleurs pas du tout compris cette histoire de redirections fréquentes et obligatoires à cause de l'architecture du site. C'est vraiment bizarre.
Ahaha Smiley lol

Plus sérieusement, voici un exemple:

dans mon dossier controller j'ai deux fichiers :
- initTache.php
- traitementTache.php
dans mon dossier vue j'ai deux fichiers :
- vueTache.php
- template.php, ce dernier correspondant au gabarit actualisé en fonction de variables de sessions

Utilisation classique : un utilisateur demande la page vueTache.php. La page initTache.php est appelée, elle met à jours les variables de sessions et redirige vers la page template.php qui elle même incluera la page vueTache.php dans son contenu.
Tu m'as suivis ?
C'est même plus bizarre là, c'est la 4éme dimension. Smiley langue

Pourquoi ne pas juste inclure et afficher la vue au lieu de faire une redirection ?
C'est ce que je fais mais avant d'inclure et d'afficher la vue je dois effectuer des traitements en php : partie controller.
Une fois ces traitements effectués, il faut rediriger vers l'affichage de la vue : c'est ça le concept du design pattern MVC.

Ça devient plus claire ? Smiley ravi
Eclairzs a écrit :

Une fois ces traitements effectués, il faut rediriger vers l'affichage de la vue : c'est ça le concept du design pattern MVC.


Cite moi un seul framework MVC à part le tiens qui fait une redirection vers la vue avec passage des valeurs par session. Je pense que t'as loupé un truc au moment de la conception. Smiley cligne

Regarde l'exemple donné par arnolem.
Modifié par jb_gfx (06 Jun 2013 - 15:35)
L'exemple donné par arnolem est (volontairement) simpliste mais il montre bien comment fonctionne le MVC.

En passant les "traitements" doivent être fait dans le modèle et pas dans le contrôleur qui lui doit idéalement rester le plus simple possible.

PS : Où est-ce que tu as appris le motif MVC ?
Modifié par jb_gfx (06 Jun 2013 - 15:56)
Oui, son exemple reprend le format qu'utilise Wordpress et effectivement il est très simple.
Dans le cas de l'application web que je développe je n'ai pas réellement de modèle (mise à part la bdd) d'où la raison pour laquelle les traitements sont fait dans le controller.

L'approche MVC que l'on m'a enseigné était plus orienté logiciel que développement web d'où la raison de l'utilisation des header('Location:...'); qui permettent d'avoir un site ayant une architecture très proche d'une application client lourd codée en Java ou autre.

Suite à vos remarques je suis donc en train de me documenter sur l'adaptation du design pattern MVC au niveau d'un site web, de la manière la plus optimisée possible autant pour le référencement que le reste.

Merci pour vos infos, sujet résolu !
Je te conseille de regarder comment est construit le framework PHPixie. C'est un bon exemple d'architecture MVC légère, élégante et qui offre de bonnes performances. Étudier un bon code source vaut toutes les documentations. Smiley smile