Bonjour
J'ai un petit projet créé avec PHP(sans framework, seulement PHP
je l'ai organisé à l'aide de l'architecture MVC (Model-View-Controller) en utilisant AltoRouter pour bien gérer les routes
l'architecture du projet
le contenu du fichier index.php|public
- index.php|src // contient des fichiers de traitement
- Router.php|views
- index.php- ajax.php
Code php : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 //->get('/link', 'file_name', 'page_name') $router = new Router(VIEW_PATH); $router ->get('/blog', 'index', 'home') ->get('/ajax', 'ajax', 'ajax') ->post('/ajax/[*:slug]', 'ajax', 'ajax_') //ajax search ->run();
la class Router.php dans le fichier Src, elle gère le système de routage, instancie d'Altorouter, j'utilise ob_start() and ob_get_clean() pour inclure le header et le footer )
Code php : 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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67 <?php namespace App; use AltoRouter; class Router { /** * @var string */ private $viewPath; /** * @var AltoRouter */ private $router; public function __construct(string $viewPath) { $this->viewPath = $viewPath; //instanci le router $this->router = new \AltoRouter(); } public function get(string $url, string $view, ?string $name = null): self { $this->router->map('GET', $url, $view, $name); return $this; } public function post(string $url, string $view, ?string $name = null): self { $this->router->map('POST', $url, $view, $name); return $this; } public function match(string $url, string $view, ?string $name = null): self { $this->router->map('POST|GET', $url, $view, $name); return $this; } public function url($routerName, array $params = []) { return $this->router->generate($routerName, $params); } public function run(): self { $match = $this->router->match(); $view = $match['target'] ?: '404'; $params = $match['params']; $router = $this; $layout = 'layouts/default'; ob_start(); require $this->viewPath . DIRECTORY_SEPARATOR . $view . '.php'; $content = ob_get_clean(); require $this->viewPath . DIRECTORY_SEPARATOR . $layout . '.php'; return $this; } }
cette application utilise bien Ajax pour faire la recherche en temps réel , mises à jour des données des graphes ...
la question qui se pose c'est comment utiliser Ajax avec ce system, car d'habitude on passe comme l'URL dans Ajax le fichier qui va faire le traitement (data .Php)
mais avec l'architecture MVC, je n'ai pas pu faire ça ,car :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 $.ajax({ url: "data.php", method: "POST", data: temp + postVar,
1 - la partie vue est séparée du parti traitement(controller)
2- si je passe la route http://localhost:8090/ajax/ comme URL ==>le code appellera la page entière, puisque toutes les pages du fichier Views, auront un en-tête et un pied de page (avce ob_start() and ob_get_clean() )
{un traitementen post ==> creation d'une route ==> une nouvelle page(view) }
Y a-t-il un moyen pour faire appeler une page de traitement comme on faisait sans MVC,
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 $.ajax({ //Data, that will be sent to "ajax.php/slug". url: "http://localhost:8090/ajax/" + query, // La route : post('/ajax/[*:slug]', 'ajax', 'ajax_') //AJAX type is "POST". method: "POST", data: { query: query }, ddataType: 'html',
je veux continuer avec MVC et ne pas revenir au system classique, please help
Merci
Partager