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
public/index.php
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]
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 <?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/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
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(); } }
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
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/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 <?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'); } }
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.
Partager