Fatal error: Uncaught Error: Class 'Router\Route' not found in C: routes\Router.php on line 19
Bonjour à tous. Utilisant la programmation orientée objet et la méthode Mvc afin de professionnaliser mon code, je me retrouve face à un problème qu'il m'est difficile de résoudre.
Un problème de route apparemment qui fait que lors de l’exécution, il semblerait manquer un fichier.
Voici l'architecture de mes dossiers.
Pièce jointe 609603
composer.json
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| {
"name": "*******/aaa",
"authors": [
{
"name": "*********",
"email": "************"
}
],
"autoload": {
"psr-4": {
"Router\\": "routes/",
"App\\": "app/",
"Database\\": "database/"
}
},
"require": {}
} |
fichier.htaccess
Code:
1 2 3 4 5
| RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ public/index.php?url=$1 [QSA,L] |
public/index.php
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| <?php
use Router\Router;
require '../vendor/autoload.php';
define('VIEWS', dirname(__DIR__) . DIRECTORY_SEPARATOR . 'views' . DIRECTORY_SEPARATOR);
define('SCRIPTS', dirname($_SERVER['SCRIPT_NAME']) . DIRECTORY_SEPARATOR);
$router = new Router($_GET['url']);
$router->get('/', 'App\Controllers\BlogController@index');
$router->get('/posts/:id', 'BlogController@show');
$router->run(); |
routes/Route.php
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
| <?php
namespace Router;
namespace App\BlogControllers;
use Database\DBConnection;
class Route {
public $path;
public $action;
public $matches;
public function __construct($path, $action)
{
$this->path = trim($path, '/');
$this->action = $action;
}
public function matches( $url)
{
$path = preg_replace('#:([\w]+)#', '([^/]+)', $this->path);
$pathToMatch = "#^$path$#";
if (preg_match($pathToMatch, $url, $matches)) {
$this->matches = $matches;
return true;
} else {
return false;
}
}
public function execute()
{
$params = explode('@', $this->action);
$controller = new $params[0](new DBConnection('blog','localhost','root',''));
$method = $params[1];
return isset($this->matches[1]) ? $controller->$method($this->matches[1]) : $controller->$method();
}
} |
routes/Router.php
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
| <?php
namespace Router;
class Router{
private $url;
public $routes = [];
public function __construct($url)
{
$this->url = trim($url, '/');
}
public function get( $path,$action)
{
$this->routes['GET'][] = new Route($path, $action);
}
public function run()
{
foreach ($this->routes[$_SERVER['REQUEST_METHOD']] as $route) {
if ($route->matches($this->url)) {
return $route->execute();
}
}
return header("HTTP/1.0 404 Not found.");
}
} |
Controllers/BlogController
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| <?php
namespace App\Controllers;
class BlogController extends Controller{
public function index()
{
return $this->view('blog.index');
}
public function show(int $id)
{
return $this->view('blog.show'), compact('id');
}
} |
controllers/Controller.php
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| <?php
namespace App\Controllers;
use Database\DBConnection;
class Controller {
protected $db;
public function __construct(DBConnection $db)
{
$this->db=$db;
}
public function view( $path, array $params = null)
{
ob_start();
$path = str_replace('.', DIRECTORY_SEPARATOR, $path);
require VIEWS . $path . '.php';
if($params){
$params=extract($params);
}
$content = ob_get_clean();
require VIEWS . 'layout.php';
}
} |
Merci d'avance pour vos recommandations et réponses.