Skip to content

Commit 0b1a545

Browse files
committed
feat: add app concept docs
1 parent c78e29e commit 0b1a545

16 files changed

Lines changed: 411 additions & 138 deletions

docs/concept.mdx

Lines changed: 113 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -6,45 +6,138 @@ title: "👨🏽‍💻 Concept et Architecture"
66
import SuggestionFeature from "@site/src/components/Partials/SuggestionFeature";
77
import BugReportFeature from "@site/src/components/Partials/BugReportFeature";
88

9-
# Bow Framework
9+
## Comprendre le cycle de vie d’une requête dans BowPHP
1010

11-
<a href="https://bowphp.com" title="docs"><img src="https://img.shields.io/badge/docs-read%20docs-blue.svg?style=flat-square"/></a>
12-
<a href="https://packagist.org/packages/bowphp/app" title="version"><img src="https://img.shields.io/packagist/v/bowphp/app.svg?style=flat-square"/></a>
13-
<a href="https://github.com/bowphp/app/blob/master/LICENSE" title="license"><img src="https://img.shields.io/github/license/mashape/apistatus.svg?style=flat-square"/></a>
14-
<a href="https://travis-ci.org/bowphp/app" title="Travis branch"><img src="https://img.shields.io/travis/bowphp/app/master.svg?style=flat-square"/></a>
11+
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.
1512

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é
1714

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 :
74+
75+
```php title="config/database.php"
76+
return [
77+
'default' => 'mysql',
78+
'connections' => [
79+
'mysql' => [
80+
'driver' => 'mysql',
81+
'host' => '127.0.0.1',
82+
'port' => 3306,
83+
'database' => 'bowphp_app',
84+
'username' => 'root',
85+
'password' => '',
86+
'charset' => 'utf8mb4',
87+
'collation' => 'utf8mb4_unicode_ci',
88+
],
89+
],
90+
];
91+
```
92+
93+
#### **Classe `Bow\Database\DatabaseConfiguration`**
94+
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)
19105

20106
```mermaid
21-
graph TD
22-
A[Requête HTTP] -->|Entrée utilisateur| B[Routeur]
23-
B -->|Associe une route| C[Contrôleur]
24-
C -->|Appelle la logique métier| D[Modèle]
25-
D -->|Interaction| E[(Base de données)]
26-
C -->|Retourne des données| F[Vue]
27-
F -->|Génère la réponse HTML| G[Réponse HTTP]
107+
graph TB
108+
A[Requête HTTP] -->|Entrée utilisateur| B[Request]
109+
B -->|Passe la requête| C[Kernel]
110+
C -->|Charge les modules| D[Routeur]
111+
D -->|Vérifie la route et<br>appelle le contrôleur| E[Middleware]
112+
E -->|Valide la requête<br>et continue| F[Contrôleur]
113+
F -->|Exécute la logique métier| G[Modèle]
114+
G -->|Interaction avec| H[(Base de données)]
115+
F -->|Retourne les données| I[Vue]
116+
I -->|Génère la réponse HTML/JSON| J[Réponse HTTP]
28117
29118
subgraph Framework BowPHP
30-
B
31119
C
32120
D
121+
E
33122
F
123+
G
124+
I
34125
end
35126
```
36127

128+
### Résumé des points importants
129+
130+
- **Cycle de vie structuré** : Une requête suit un chemin précis (Request → Kernel → Routeur → Middleware → Contrôleur → Modèle → Vue → Réponse).
131+
- **Rôle du routeur** : Le routeur détecte la route correspondant à la requête et appelle le contrôleur et la méthode associés.
132+
- **Kernel** : Orchestre le chargement des configurations depuis le dossier config et initialise les modules.
133+
- **Modularité** : Chaque composant (routeur, base de données, etc.) est indépendant, ce qui simplifie la gestion et améliore la maintenabilité.
134+
37135
## Contributing
38136

39137
Merci d'avoir envisagé de contribuer à Bow Framework ! Le guide de contribution se trouve dans la documentation.
40138

41139
- [Franck DAKIA](https://github.com/papac)
42140
- [Merci aux collaborateurs](https://github.com/bowphp/app/graphs/contributors)
43141

44-
## Contact
45-
46-
- [Franck DAKIA](https://github.com/papac)
47-
- [Thanks collaborators](https://github.com/bowphp/docs/graphs/contributors)
48-
49142
<BugReportFeature />
50143
<SuggestionFeature />

docs/service.mdx

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,12 @@ import SuggestionFeature from "@site/src/components/Partials/SuggestionFeature";
77

88
# Service
99

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.
1212

1313
## Utilisation
1414

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 :
1616

1717
```bash
1818
php bow add:service UserService
@@ -36,15 +36,15 @@ class UserService
3636

3737
## Utilisation du service
3838

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.
4040

4141
Lancer la commande suivante pour créer un nouveau controller
4242

4343
```bash
4444
php bow add:controller UserController
4545
```
4646

47-
Dans le controleur nous allons maintenant injecter le service:
47+
Dans le controller, nous allons maintenant injecter le service :
4848

4949
```php
5050
class UserController extends Controller

docs/structure.mdx

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ Ici, vous retrouverez les dossiers suivants :
4242
- __Events__ : Dossier dans lequel sera sauvegardé les events générés par Bow Console.
4343
- __Models__ : Dossier dans lequel sera sauvegardés les modèles de l'application.
4444
- __Validations__ : Dossier dans lequel sera sauvegardées les validations de l'application.
45-
- __Exceptions__ : Dossier dans lequel sera sauvegardées les exceptions personnalisés de l'application.
45+
- __Exceptions__ : Dossier dans lequel sera sauvegardées les exceptions personnalisées de l'application.
4646
- __Services__ : Dossier dans lequel sera sauvegardés les services générés par Bow Console.
4747
- __Producers__ : Dossier dans lequel sera sauvegardés les producers générés par Bow Console.
4848
- __Commandes__ : Dossier dans lequel sera sauvegardées les commandes générées par Bow Console.
@@ -54,7 +54,7 @@ Vous trouverez aussi les fichiers suivants :
5454

5555
## Dossier frontend
5656

57-
C'est là que vous allez insérer tous les fichiers qui sont utilisés dans les vues de votre application. Vous y retrouverez les dossiers suivant:
57+
C'est là que vous allez insérer tous les fichiers qui sont utilisés dans les vues de votre application. Vous y retrouverez les dossiers suivants :
5858

5959
- __js__: Votre fichier `Javascript` seront sauvegardés ici.
6060
- __sass__: Votre ficher scss seront sauvegardés ici.
@@ -68,19 +68,12 @@ C'est là que vous allez insérer tous les fichiers qui sont utilisés dans les
6868

6969
## Dossier var
7070

71-
Ici, Bow va stocker les fichiers de log et le cache de votre application. Vous y retrouverez les dossiers suivant:
71+
Ici, Bow va stocker les fichiers de log et le cache de votre application. Vous y retrouverez les dossiers suivants :
7272

73-
- __storage__: Dossier dans lequel l'application sauvegarde les fichiers téléchargé de l'application
73+
- __storage__: Dossier dans lequel l'application sauvegarde les fichiers téléchargés de l'application
7474
- __logs__: Dossier dans lequel est sauvegardés les logs de l'application.
7575
- __session__: Dossier dans lequel est sauvegardés les fichiers de session de l'application.
7676
- __cache__: Dossier dans lequel l'application sauvegarde les caches de l'application
7777
- __view__: Dossier dans lequel l'application sauvegarde le cache de compilation des vues
7878

79-
## Dossier tests
80-
81-
Ici, vous allez stocker vos fichiers de test unity. Et par souci de bien faire, nous avons :
82-
83-
- __Http__: Vos sauvegarder vos fichiers de test Http seront ici
84-
- __Unity__: Vos fichiers de test Unity seront ici
85-
8679
<SuggestionFeature />

docs/upload.mdx

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,14 @@ import SuggestionFeature from "@site/src/components/Partials/SuggestionFeature";
88
- [Traiter les fichiers envoyés](#traiter-les-fichiers-envoyés)
99
- [Determiner si un fichier existe](#determiner-si-un-fichier-existe)
1010
- [Validation des téléchargements réussis](#validation-des-téléchargements-réussis)
11-
- [Savegarder le fichier](#savegarder-le-fichier)
11+
- [Sauvegarder le fichier](#savegarder-le-fichier)
1212
- [Il manque quelque chose ?](#il-manque-quelque-chose-)
1313

1414
## Traiter les fichiers envoyés
1515

1616
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.
1717

18-
Considérons le formulaire suivant:
18+
Considérons le formulaire suivant :
1919

2020
```html
2121
<form action="/upload" method="post" enctype="multipart/form-data">
@@ -40,7 +40,7 @@ $app->post('/upload', function(Request $request) {
4040
});
4141
```
4242

43-
Le resultat de `debug` :
43+
Le résultat de `debug` :
4444

4545
```php
4646
// Debug output
@@ -87,9 +87,9 @@ $file = $request->file('photo');
8787
$file->moveTo("/path/to/your/store/directory", $filename = null);
8888
```
8989

90-
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).
9191

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):
9393

9494
```html
9595
<form action="/upload" method="post" enctype="multipart/form-data">
@@ -99,7 +99,7 @@ Souvent dans le cas où vous attendez des fichiers envoyé via un formulaire don
9999
</form>
100100
```
101101

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).
103103

104104
```php
105105
use Bow\Http\Request;

0 commit comments

Comments
 (0)