Bonjour!
Besoin d'aide, je m'entraine sur MVC en php, ce dernier temps, je suis en train de suivre un cours sur youtub de live coding sur le MVC. Pendant le cours, j'essayais d'appliquer les mêmes codes, mais trop souvent je rencontrais de soucie et parfois j'arrivais à trouver la solution avec le peu de connaissance que j'ai déjà de la POO en php sauf que cette fois ci, je suis bloqué et ça m'empêche de progressser. selon la structure de live coding dans ce cours, c'est de réaliser une structures des URL comme celle-ci : http://url_du_site/controller/action. Cette idée me plaît beaucoup et j'aimerai bien la comprendre pour me permettre à réaliser mes applications de la sorte sauf que j'ai été bloqué et je ne sais pas à qui d'autre poser la question si ce n'est que de venir ici pour que les Ir m'aident à trouver la solution. Alors, selon la structure de l'application, il dispose d'un dossier app qui comprend deux fichiers (Controller.php et Model.php), d'un dossier controller (Articles.php), d'un dossier model (Article.php) et d'un fichier index.php qui se trouve sur la racine du site et d'un autre fichier .htaccess
le fichier index.php est considéré comme l'autholoader et voici comment il se comporte
index.php
<?php
//on genere une constante qui contiendra le chemin vers index.php (la racine)
define('ROOT', str_replace('index.php', '', $_SERVER['SCRIPT_FILENAME']));
require_once(ROOT.'app/Model.php');
require_once(ROOT.'app/Controller.php');
$params = explode("/", $_GET['p']);
if($params[0] != "")
{
$classe = ucfirst($params[0]);
$method = isset($params[1]) ? $params[1]:"index";
require_once(ROOT.'controllers/'.$classe.'.php');
$control = new $classe();
if(method_exists($classe, $method))
{
unset($params[0]);
unset($params[1]);
call_user_func_array([$classe, $method], $params);
//$control->$method();
}
else
{
require_once(ROOT.'views/404.html');
}
}
?>
Tout marché très bien jusqu'au point de passer un 3ème paramettre qui est l'id d'un article, pourtant chez lui, ça marche très bien mais chez moi, je suis bloqué malgrè le fait que j'ai le même code que lui. l'erreur provient vers la ligne ou il utilise la fonction call_user_func_array() et le message d'erreur qui m'est renvoyé c'est:
Deprecated: Non-static method Articles::index() should not be called statically in C:\wamp64\www\MVC\index.php on line 25
et l'autre c'est
Fatal error: Uncaught Error: Using $this when not in object context in C:\wamp64\www\MVC\controllers\Articles.php on line 13
Error: Using $this when not in object context in C:\wamp64\www\MVC\controllers\Articles.php on line 13
la partie qui pose problème
index.php
<?php
unset($params[0]);
unset($params[1]);
call_user_func_array([$classe, $method], $params);
//$control->$method();
?>
à noter que le fichier Articles.php se comporte comme indiquer ci-dessous:
Articles.php
<?php
class Articles extends Controller {
public function index()
{
//$articles = $this->envoie('Article')->getAll();
$arts = new Controller();
$lines = $arts->envoie('Article');
$articles = $lines->getAll();
$this->viewsArticle('index', ['articles'=>$articles]);
}
public function lire($id)
{
echo $id;
}
}
?>
S'il vous plaît, besoin d'aide, le besoin c'est d'arriver à passer le 3è paramettre