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
|public
- index.php
|src // contient des fichiers de traitement
- Router.php
|views
- index.php
- ajax.php
le contenu du fichier index.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)

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
$.ajax({
                url: "data.php",
                method: "POST",
                data: temp + postVar,
mais avec l'architecture MVC, je n'ai pas pu faire ça ,car :

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) }
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',
Y a-t-il un moyen pour faire appeler une page de traitement comme on faisait sans MVC,

je veux continuer avec MVC et ne pas revenir au system classique , please help

Merci