Bonjour,
Une bonne gestion du MVC ne se fait pas par l’intermédiaire d'include à la volé !
En gros tu devrais avoir plusieurs dossiers :
.app (pour stocker les contrôleurs et les vues)
..controller (objet avec des actions / methodes)
..view (fichier phtml)
.conf (fichier de configurations)
.lib (pour stocker les objets fonctionnels)
.data (pour stocker les éléments css, js, img, fichier relatif au design)
index.php (qui fait office de dispatcher)
.htaccess (pour géré ta réécriture d'url)
Je t'invite à te renseigner sur le VHOSTING, ce qui va te permettre de travailler en condition similaire à cette du web.
Uns fois chose fait, cela va te permettre d’utiliser un nom de domaine en local pour une bonne exploitation du module_rewrite (réécriture d'url).
Pour moi l'url dois s’écrire de cette manière :
http://www.monsite.lan/controller/action/param1/param2
Le première élément après le nom de domaine étant le contrôleur à lancer, le deuxième étant l'action (la méthode) de se même contrôleur à lancer et du reste de la requête (ici param1 & param2) doivent être transmis à l'action lancé.
Je t'invite aussi à te renseigner sur l'autoload, quasi indispensable pour les applications utilisant de nombres objets.
Pour les vues, je te fourni un objet, qui doit être configuré dans tes action d'un contrôleur lancé.
<?php
class view
{
private $filename ;
private $vars ;
public function __construct( $vars = array() )
{
$this-> vars = $vars ;
}
public function __set( $name, $value )
{
$this-> vars[$name] = $value ;
}
public function __get( $name )
{
$result = null ;
if( array_key_exists( $name, $this-> vars ) )
{
$result = $this-> vars[$name];
}
return $result ;
}
public function __isset( $name )
{
return isset( $this-> vars[$name] );
}
public function __unset( $name )
{
if( array_key_exists( $name, $this-> vars ) )
{
unset( $this-> vars[$name] );
}
}
public function __toString()
{
$result = '' ;
if( !is_null( $this-> filename ) )
{
ob_start();
require $this-> filename ;
$result = ob_get_contents();
ob_end_clean();
}
return $result ;
}
public function load( $filename )
{
if( file_exists( $filename ) )
{
$this-> filename = $filename ;
}
else trigger_error( "La vue \"$filename\" est introuvable." );
}
}
Exploitation (à faire d'une méthode / action d'un contrôleur lancé) :
<?php
define( 'PATH_ROOT', dirname( __FILE__ ) );
include_once 'view.php' ;
$pagePrincipale = new view();
$pagePrincipale-> load( PATH_ROOT.'/view/principale.phtml' );
$pagePrincipale-> title = "Accueil" ;
$pageContenu = new view();
$pageContenu-> load( PATH_ROOT.'/view/contenu.phtml' );
$pageContenu-> message = "Ceci est un message" ;
$pagePrincipale-> pageContenu = $pageContenu ;
echo $pagePrincipale ;
exit ;
ps : la constante et l'inclusion de l'objet de vue doit être fait sur l'index.php
Page principale :
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title><?php echo $this-> title ?></title>
</head>
<body>
<div id="principale">
<?php echo $this-> pageContenu ?>
</div>
</body>
</html>
Page contenu :
<div id="contenu">
<span><?php echo $this-> message ?></span>
</div>
résultat :
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Accueil</title>
</head>
<body>
<div id="principale">
<div id="contenu">
<span>Ceci est un message</span>
</div>
</div>
</body>
</html>
Je connais très bien le site de graphikart, pour le tuto que tu as consulté, il faut le voir comme une ébauche d'un MVC, non pas comme tel. Il reste bcp de chose à mettre en place pour avoir quelque chose de performant et d'exploitable. Si tu souhaites construire ton propre MVC dis le moi et j'essayerai de faire un tuto vidéo de quelques heures pour pouvoir évoluer dans ce sens.
Ciao et bon courage.