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 JavaScript : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
RewriteEngine On
 
RewriteCond %{REQUEST_FILENAME} !-f
 
RewriteRule ^(.*)$ public/index.php?url=$1 [QSA,L]
public/index.php
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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.