Newer
Older
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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
# MVC
## Modele Vue Controller
---
### Arborescence du projet
```txt
project_root/
│
├── app/
│
├── config/
│ └── config.php
│
└── public/
```
---
### Arborescence du projet
#### /public
```txt
public/
├── index.php
├── print_hello.php
└── css/
└── style.css
```
---
### Arborescence du projet
#### /public/print_hello.php
```php
<?php
require_once '../app/controllers/HelloWorldController.php';
(new HelloWorldController())->index();
?>
```
---
### Arborescence du projet
#### /app
```txt[]
app/
│
├── controllers/
│
├── entities/
│
├── repositories/
│
├── services/
│
├── trait/
│
├── views/
│
└─ core/
```
---
### Arborescence du projet
#### /app/controllers
```php[1-4|6-10|12-15|17-20|22-25]
require_once '../app/core/Controller.php';
require_once '../app/services/HelloService.php';
class HelloWorldController extends Controller
{
private HelloService $helloService;
public function __construct()
{
$this->helloService = new HelloService();
}
public function index():void
{
$this->view('hello_world', $this->helloService->hello(), ['name' => 'Salim']);
}
public function indexJson():void
{
$this->json(['title' => $this->helloService->hello(), 'name' => 'Salim']);
}
public function redirectToJson()
{
$this->redirectTo('/json.php');
}
}
```
---
### Arborescence du projet
#### /app/entities et /app/repositories
##### Entities
- Classes représentant les tables de la base de données
##### Repositories
- Gestion des connexions à la base de données et exécution des requêtes SQL
---
### Arborescence du projet
#### /app/services
```php[]
<?php
class HelloService
{
public function hello()
{
return 'Hello World!';
}
}
```
---
### Arborescence du projet
#### /app/trait
- Traits utilisés par les services ou les contrôleurs
---
### Arborescence du projet
#### /app/views
```php
public function index():void
{
$this->view('hello_world', $this->helloService->hello(), ['name' => 'Salim','errors'=>['Nom incorrect']]);
}
```
```php[]
<?php require '../app/views/_template/header.php'; ?>
<h1>Hello <?php echo $name; ?></h1>
<?php if (!empty($errors)): ?>
<?php foreach($errors as $error): ?>
<div class="alert alert-danger text-center" role="alert">
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
</div>
<?php endforeach; ?>
<?php endif; ?>
<?php require '../app/views/_template/footer.php'; ?>
```
---
### Arborescence du projet
#### /app/core/
```php[1|2|5-17|19-24|26-29]
abstract class Controller {
protected $viewPath = '../app/views/'; // Chemin vers les vues
protected function view(string $viewName, string $title = 'Titre de la page', array $data = [], $status = 200) {
$filePath = $this->viewPath . $viewName . '.php';
if (file_exists($filePath)) {
// Extraire les données pour qu'elles soient disponibles dans la vue comme des variables
extract($data);
http_response_code($status);
require $filePath;
} else {
throw new Exception("Vue non trouvée : " . $filePath);
}
}
protected function json($data, $status = 200) {
header('Content-Type: application/json');
http_response_code($status);
echo json_encode($data);
exit();
}
protected function redirectTo($url) {
header("Location: $url");
exit();
}
}
```
---
### Arborescence complète du projet :
| Rôle | Dossier |
|------------|------------------------------------------------------------|
| Modéle | - app/entities<br/> - app/repositories<br/> - app/services |
| Vue | - app/views |
| Controller | - app/controllers |
| Routes | - public |