Skip to content

Commit

Permalink
update simple page + post + screen
Browse files Browse the repository at this point in the history
  • Loading branch information
bfoujols committed Jul 11, 2024
1 parent 9c7b92a commit 2be8806
Show file tree
Hide file tree
Showing 9 changed files with 66 additions and 25 deletions.
6 changes: 3 additions & 3 deletions docs/_summary.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,9 @@
* [Construire](build/index.md)
* [Le concept d'archirtecture MVC](build/concept-mvc.md)
* [Arborescence](build/arborescence.md)
* [Comment construire une page ?](build/controller-edu.md)
* [Comment construire un formulaire en methode POST](build/controller-edu-post.md)
* [Comment construire une commande CLI](build/new-command-edu.md)
* [Construire une page](build/controller-edu.md)
* [Construire un formulaire](build/controller-edu-post.md)
* [Construire une commande CLI](build/new-command-edu.md)
* [Consolider](boost/index.md)
* [Request - La gestion des requêtes HTTP](boost/resquet.md)
* [DatabaseService - La gestion des données](boost/dataservice.md)
Expand Down
Binary file added docs/assets/HelloController.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/assets/screen-edu-start-cli.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/assets/screen-edu-start-web.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file removed docs/assets/screen-edu-start.png
Binary file not shown.
69 changes: 48 additions & 21 deletions docs/build/controller-edu-post.md
Original file line number Diff line number Diff line change
@@ -1,37 +1,64 @@
# Comment faire un post dans un controller ?
# Comment faire un formulaire ?

Pour créer un post dans un controller, il faut faire un formulaire dans le fichier twig et un traitement dans le controller.
Pour créer un post dans un controller, il faut faire un formulaire HTML dans le fichier twig et un traitement dans le controller.

## Les étapes pour créer un post dans un controller

- Modifier le fichire de configuration des routes "config/routes.yaml"
- Créer un controller
- Créer un formulaire dans le fichier twig
- Créer un traitement dans le controller
- Comprendre comment fonctionne la classe [Request](../boost/resquet.md) pour récupérer les données du formulaire



### Création d'un controller

Nous allons créer un page "ville" avec la commande suivante :

```Shell
php bin/edu make:controller Ville
```

La commande va générer un controller "VilleController.php" dans le dossier "src/Controller" et un fichier "ville.html.twig" dans le dossier "src/Template/ville".
Voici l'arborecence des fichiers générés :

``` hl_lines="5 8 9"
├── app
│ ├── Config
│ │ └── routes.yaml
│ ├── Controller
│ │ └── VilleController.php
│ └── Template
│ ├── base.html.twig
│ └── ville
│ └── ville.html.twig
```

### Modifier le fichier de configuration des routes

Par défaut, les routes sont en méthode GET. Pour pouvoir envoyer des données en POST, il faut modifier la route dans le fichier de configuration des routes.
Selectionner dans le fichier "config/routes.yaml" la route de votre controller et ajouter la méthode POST.

Exemple de la route /hello :
Exemple de la route /ville :

```diff
hello:
uri: /hello
controller: Controller\TestControllerController
ville:
uri: /ville
controller: Controller\VilleController
- httpMethod: [GET]
+ httpMethod: [GET,POST]
```

!!! warning "Attention"

Dans le cas d'une erreur "405 Method Not Allowed", vérifiez que la méthode POST est bien ajoutée dans le fichier de configuration des routes.
Dans le cas d'une erreur "HTTP 405 Method Not Allowed", vérifiez que la méthode POST est bien ajoutée dans le fichier de configuration des routes.

### Créer un formulaire dans le fichier twig

Créer un formulaire en methode POST dans le fichier twig pour envoyer les données au controller.
Selectionner le ficher "ville.html.twig" dans le dossier "src/Template/ville"

Exemple de formulaire :
Voici un exemple de formulaire :

```diff
{% extends "base.html.twig" %}
Expand All @@ -40,26 +67,25 @@ Exemple de formulaire :

{% block content %}
<h1>{{ titre }}</h1>
+ {% if ville is not null %}
+ {% if nom_ville is not null %}
+ <div class="alert alert-success" role="alert">
+ La ville est {{ ville }}
+ La ville est {{ nom_ville }}
+ </div>
+ {% endif %}
+
+ <p>Créer une nouvelle ville</p>
+ <form action="/hello" method="post">
+ <label for="ville">Ville</label>
+ <input type="text" id="ville" name="ville">
+ <form action="/ville" method="post">
+ <label for="nom_ville">Ville</label>
+ <input type="text" id="nom_ville" name="nom_ville">
+ <input type="submit" value="Envoyer">
+ </form>
{% endblock %}
```

Dans cet exemple, on affiche un formulaire pour créer une nouvelle ville.

On récupère la ville dans le controller pour l'afficher.
Et on affiche la ville si elle est différente de null. (condition if dans la syntaxe twig)
L'affichage de la ville se fait par la syntaxe twig `{{ ville }}`.
On affiche la ville si elle est différente de null. (condition if dans la syntaxe twig)
L'affichage de la ville se fait par la syntaxe twig `{{ nom_ville }}`.

Je vous invite à regarder la documentation de [Twig](https://twig.symfony.com/doc/3.x/){:target="_blank"} pour plus d'informations sur les formulaires.

Expand All @@ -81,15 +107,15 @@ use Twig\Error\LoaderError;
use Twig\Error\RuntimeError;
use Twig\Error\SyntaxError;

class HelloController implements ControllerInterface
class VilleController implements ControllerInterface
{
public function execute(Request $request): string|null
{
return TwigCore::getEnvironment()->render('hello/hello.html.twig',
return TwigCore::getEnvironment()->render('ville/ville.html.twig',
[
"titre" => 'HelloController',
"titre" => 'VilleController',
- "request" => $request
+ "ville" => $request->get('ville')
+ "ville" => $request->get('nom_ville')
]
);
}
Expand All @@ -98,6 +124,7 @@ class HelloController implements ControllerInterface

Dans cet exemple, on récupère la ville du formulaire dans le controller avec la méthode get de la classe [Request::get($key)](../boost/resquet.md#getkey).


!!! info "Pour aller plus loin"

Pour aller plus loin, vous pouvez lire la documentation de la classe [Request](../boost/resquet.md) pour comprendre comment gérer les requêtes HTTP.
Expand Down
2 changes: 2 additions & 0 deletions docs/build/controller-edu.md
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,8 @@ Dans la vue "hello.html.twig", on affiche le titre de la page "HelloController"

Vous pouvez accéder à votre controller en tapant l'url suivante : [http://localhost:8042/hello](http://localhost:8042/hello){:target="_blank"}

![HelloController.png](../assets/HelloController.png)

## Modifier le fichier des routes
Et modifier le fichier des routes "config/routes.yaml" pour ajouter la route de votre controller.

Expand Down
2 changes: 1 addition & 1 deletion docs/installation/command-edu.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ php bin/edu
Ce résultat est un exemple et il ne sera probablement pas le vôtre.

<figure markdown="span">
![Screen Start Edu App](../assets/screen-edu-start.png)
![Screen Start Edu App](../assets/screen-edu-start-cli.png)
</figure>

Pour voir les commandes disponibles, vous pouvez taper la commande suivante :
Expand Down
12 changes: 12 additions & 0 deletions docs/installation/start-application.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,18 @@ Pour démarrer l'application, il suffit ouvrir un terminal :
php -S localhost:8042 -t public
```

Voici un exemple de résultat de la ligne de commande :

<figure markdown="span">
![Screen Start Edu App](../assets/screen-edu-start-cli.png)
</figure>

Voici un exemple de résultat de la page web :

<figure markdown="span">
![Screen Start Edu App](../assets/screen-edu-start-web.png)
</figure>

!!! info "Adresse de l'application"

Cette commande va démarrer le serveur de développement à l'adresse [http://localhost:8042](http://localhost:8042){:target="_blank"}.
Expand Down

0 comments on commit 2be8806

Please sign in to comment.