Bonsoir à tous,

Après avoir suivi le tutoriel sur la création de son propre MVC, je me suis posé cette question.
Lors du tutoriel, on comprends bien le fonctionnement de comment et où créer les models et controllers pour chaque news, categories etc... que l'on veut afficher.

Seulement je n'arrive pas à comprendre comment on fait pour afficher une page d'accueil simple sans rentrer un paramettre[0] sans l'url (exemple : http://monsiteweb.fr/) au lieu de http://monsiteweb.fr/tutoriels/

J'essai de comprendre, ne me blamer pas..aie..ouille...
Merci les gars :)

6 réponses


Lucaslachose2
Réponse acceptée

t'étais pas obligé de recréer un fichier index, il te suffisait juste de faire :

$params = explode('/',$_GET'p']);  
$controller = (isset($params[0]) && !empty($params[0]))?$params[0]:'accueil';  
$action = (isset($params[1]) && !empty($params[1]))?$params[1]:'index';

EDIT : La coloration syntaxique de Grafikart ajoute empty après !empty ,
n'y prêtes pas attention...

Et ben là tu choisis quel controller doit être affiché suivant le param définie dans l'url, il suffit que tu teste si le param existe et s'il existe pas et ben tu choisis quel controller par default tu veux afficher.

Je sais pas quel méthode Grafikart utilise pour afficher le controller donc je ne peux pas de montrer de code dsl.

LB_
Auteur

D'après ce que j'ai compris il faudrai dire à ce fichier :

<?php
define('WEBROOT',str_replace('index.php','',$_SERVER'SCRIPT_NAME']));
define('ROOT',str_replace('index.php','',$_SERVER'SCRIPT_FILENAME']));
require(ROOT.'core/model.php');
require(ROOT.'core/controller.php');
mysql_connect('localhost','root','');
mysql_select_db('tuto');
$params = explode('/',$_GET'p']);
$controller = $params[0];
$action = isset($params[1]) ? $params[1] : 'index';
require('controllers/'.$controller.'.php');
$controller = new $controller();
if(method_exists($controller, $action)){
    unset($params[0]); unset($params[1]);
    call_user_func_array(array($controller,$action),$params);
    //$controller->$action();
}
else{
    echo 'erreur 404'; 
}
?>
LB_
Auteur

J'ai essayé quelque chose mais je n'y arrive pas. J'ai essayé de mettre une condition sur le parametre[0].

<?php
define('WEBROOT',str_replace('index.php','',$_SERVER'SCRIPT_NAME']));
define('ROOT',str_replace('index.php','',$_SERVER'SCRIPT_FILENAME']));
require(ROOT.'core/model.php');
require(ROOT.'core/controller.php');
mysql_connect('localhost','root','root');
mysql_select_db('grafikart');
$params = explode('/',$_GET'p']);
$controller = isset($params[0]) ? 'accueil';
$action = isset($params[1]) ? $params[1] : 'index';
require('controllers/'.$controller.'.php');
$controller = new $controller();
if(method_exists($controller, $action)){
    unset($params[0]); unset($params[1]);
    call_user_func_array(array($controller,$action),$params);
    //$controller->$action();
}
else{
    echo 'erreur 404'; 
}
?>

Et si tu fais une condition sur ton $_GET'p’] pour voir s'il existe avant tout et si'l existe pas tu choisi ton controller par default

if(isset($_GET'p'])) {
    $params = explode('/',$_GET'p']);
    $controller = $params[0];
    $action = isset($params[1]) ? $params[1] : 'index';
} else {
    $controller = 'acceuil';
    $action = 'index';
}
require('controllers/'.$controller.'.php');
$controller = new $controller();
if(method_exists($controller, $action)){
    unset($params[0]); unset($params[1]);
    call_user_func_array(array($controller,$action),$params);
    //$controller->$action();
}
else{
    echo 'erreur 404'; 
}

Ca fonctionne là ou pas???

EDIT: je viens de voir que tu avais fait une erreur dans l'opération tertiaire de $controller car après le ? tu as mit juste accueil hors qu'il faut 2 variables séparé par : comme pour $action mais même ça fonctionne pas essaye avec mon code tu vera.

LB_
Auteur

Je vais essayé dans la journée, je te ferai part de mon retour, merci bien djtec :)

Edit : Après avoir créer mon controller accueil ça ne fonctionne pas. Je ne suis pas très bon, je dois mal faire quelque chose :-/
Edit 2 : J'ai réussi en créant un autre fichier index.php avec moins de chose dedans. :)
Merci pour votre aide.