You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
BowPHP est un framework PHP léger, conçu pour offrir une structure claire et modulaire. Lorsqu’une requête arrive, elle suit un chemin bien défini appelé **cycle de vie d'une requête**. Ce cycle est organisé pour séparer les responsabilités, rendre le code facile à maintenir et améliorer les performances.
15
12
16
-
Bow est un framework PHP, écrit par **[Franck DAKIA](http://github.com/papac)** et autres contributeurs.
13
+
### Le cycle de vie d'une requête expliqué
17
14
18
-
L'objectif est de permettre aux débutants qui souhaitent travailler sur un plus large projet et comprendre le fonctionnement du **développement collaboratif** de s'y mettre avec aisance et faire de ce framework une référence dans la communauté PHP.
15
+
Chaque requête passe par plusieurs étapes avant de générer une réponse pour l'utilisateur.
16
+
17
+
Voici les étapes principales :
18
+
19
+
1.**Requête HTTP** : L'utilisateur envoie une requête via son navigateur ou une API.
20
+
2.**Request** : Le framework capture cette requête et extrait les données nécessaires (URL, paramètres, corps, etc.).
21
+
3.**Kernel** : Le Kernel est le cœur du framework. Il :
22
+
- Charge les fichiers de configuration situés dans le dossier `config` (comme `config/database.php`).
23
+
- Initialise les modules nécessaires à l'application.
24
+
4.**Application** : Elle démarre le Kernel et prépare l'environnement pour traiter la requête.
25
+
5.**Routeur** :
26
+
- Le routeur détecte la route correspondant à la requête (par exemple, `/users/42` ou `/api/login`).
27
+
- Il associe cette route à un contrôleur et une méthode spécifique, définis directement dans le code des routes.
28
+
- Si des middlewares sont définis pour cette route, ils sont exécutés avant d’appeler le contrôleur.
29
+
6.**Middleware** : Les middlewares effectuent des traitements spécifiques, comme vérifier l'authentification ou valider les données.
30
+
7.**Contrôleur** : Une fois la route validée, le contrôleur exécute la logique métier (par exemple, récupérer des données ou effectuer une action).
31
+
8.**Modèle** : Si des données sont nécessaires, le modèle interagit avec la base de données pour les récupérer ou les mettre à jour.
32
+
9.**Vue** : Le contrôleur renvoie les données récupérées au composant Vue, qui génère le contenu final (HTML, JSON, etc.).
33
+
10.**Réponse HTTP** : La réponse est envoyée à l'utilisateur.
34
+
35
+
### Le rôle du routeur en détail
36
+
37
+
Le routeur est un composant clé de BowPHP. Il agit comme une "boussole" qui oriente chaque requête vers le bon contrôleur et la bonne méthode.
38
+
39
+
#### Détection de la route
40
+
Le routeur examine l'URL de la requête et détermine quelle route correspond. Les routes sont définies dans des fichiers dédiés (souvent routes/web.php ou routes/api.php).
41
+
42
+
Exemple de définition de route :
43
+
44
+
```php
45
+
$app->get('/users/{id}', 'UserController@show');
46
+
$app->post('/api/login', 'AuthController@login');
47
+
```
48
+
49
+
:::note
50
+
Ici :
51
+
La requête `GET /users/42` est associée à la méthode show du contrôleur UserController.
52
+
La requête `POST /api/login` est associée à la méthode login du contrôleur AuthController.
53
+
:::
54
+
55
+
#### Association au contrôleur
56
+
57
+
Une fois la route détectée, le routeur :
58
+
59
+
- Valide les paramètres de l'URL (comme {id}).
60
+
- Exécute les middlewares définis pour cette route (s'il y en a).
61
+
- Appelle le contrôleur et la méthode associés à la route.
62
+
63
+
### Une architecture modulaire
64
+
65
+
BowPHP repose sur une architecture modulaire. Chaque module est indépendant, possédant sa propre configuration et remplit un rôle spécifique. Cela rend l’application facile à gérer et à étendre. Le routeur est un exemple de cette approche modulaire. Un autre exemple est le module Database, qui gère les connexions à la base de données.
66
+
67
+
#### Exemple : Le module Database
68
+
69
+
Prenons le cas du module **Database**, qui gère les connexions à la base de données :
70
+
71
+
**Fichier de configuration : `config/database.php`**
72
+
73
+
Ce fichier contient les paramètres nécessaires pour se connecter à la base de données. Voici un exemple simple :
Cette classe est chargée de lire les paramètres du fichier `config/database.php` et d’établir une connexion à la base de données.
95
+
96
+
#### **Rôle du Kernel**
97
+
Au démarrage, le Kernel charge le fichier `config/database.php` à l’aide de `DatabaseConfiguration` défini dans `app/Kernel.php` et initialise une connexion à la base de données, prête à être utilisée par d’autres composants.
98
+
99
+
### Visualisation avec un diagramme
100
+
101
+
Voici une représentation visuelle pour mieux comprendre le cycle de vie d'une requête et l'intégration modulaire (exemple avec **Database**) :
102
+
Charge les configurations
103
+
104
+
Voici un diagramme mis à jour, mettant en évidence le rôle du routeur et l’intégration modulaire (exemple avec Database)
Copy file name to clipboardExpand all lines: docs/service.mdx
+5-5Lines changed: 5 additions & 5 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -7,12 +7,12 @@ import SuggestionFeature from "@site/src/components/Partials/SuggestionFeature";
7
7
8
8
# Service
9
9
10
-
Les services sont des classes simple qui vous voulez injectées dans vos Controllers, dans d'autre services que peuvent nous permettre de découpler les logiquees et donc optimisé votre code source.
11
-
Vous pouvez aussi injectées des modèles dans vos services.
10
+
Les services sont des classes simples qui vous veulent injecter dans vos Controllers, dans d'autres services que peuvent nous permettre de découpler la logique et donc optimisé votre code source.
11
+
Vous pouvez aussi injecter des modèles dans vos services.
12
12
13
13
## Utilisation
14
14
15
-
Pour ajouter un service rien de plus simple que d'untilisé la commande suivante :
15
+
Pour ajouter un service rien de plus simple que d'utilisé la commande suivante :
16
16
17
17
```bash
18
18
php bow add:service UserService
@@ -36,15 +36,15 @@ class UserService
36
36
37
37
## Utilisation du service
38
38
39
-
Pour utiliser le service nous allons l'inject là ou nous voulons l'utiliser, dans notre cas dans un controller.
39
+
Pour utiliser le service, nous allons inject là ou nous voulons l'utiliser, dans notre cas dans un controller.
40
40
41
41
Lancer la commande suivante pour créer un nouveau controller
42
42
43
43
```bash
44
44
php bow add:controller UserController
45
45
```
46
46
47
-
Dans le controleur nous allons maintenant injecter le service:
47
+
Dans le controller, nous allons maintenant injecter le service:
Souvent les requêtes sont associés à des fichiers envoyés par l'utilisateur, vous pouvez traiter ces fichiers sur [`Bow\Http\Request`](https://bowphp.com/api/master/Bow/Http/Request.html) les méthodes `file` et le helper du même nom.
Si `$filename` est `null`, sa valeur sera le nom du fichier hasher avec la méthode [`getHashName`](https://bowphp.com/api/master/Bow/Http/UploadFile.html#method_getHashName).
90
+
Si `$filename` est `null`, sa valeur sera le nom du fichier hashé avec la méthode [`getHashName`](https://bowphp.com/api/master/Bow/Http/UploadFile.html#method_getHashName).
91
91
92
-
Souvent dans le cas où vous attendez des fichiers envoyé via un formulaire dont le champs est sous la forme `photo[]`. la méthode `file` retourne une [`Bow\Support\Collection`](https://bowphp.com/api/master/Bow/Support/Collection.html):
92
+
Souvent dans le cas où vous attendez des fichiers envoyé via un formulaire dont les champs est sous la forme `photo[]`. La méthode `file` retourne une [`Bow\Support\Collection`](https://bowphp.com/api/master/Bow/Support/Collection.html):
@@ -99,7 +99,7 @@ Souvent dans le cas où vous attendez des fichiers envoyé via un formulaire don
99
99
</form>
100
100
```
101
101
102
-
Dans cette exemple, la méthode `file` retournera une [`Bow\Support\Collection`](https://bowphp.com/api/master/Bow/Support/Collection.html) qui contiendra pour chaque oruccencre une instance de [`Bow\Http\UploadFile`](https://bowphp.com/api/master/Bow/Http/UploadFile.html).
102
+
Dans cet exemple, la méthode `file` retournera une [`Bow\Support\Collection`](https://bowphp.com/api/master/Bow/Support/Collection.html) qui contiendra pour chaque occurrence une instance de [`Bow\Http\UploadFile`](https://bowphp.com/api/master/Bow/Http/UploadFile.html).
0 commit comments