Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/main'
Browse files Browse the repository at this point in the history
  • Loading branch information
bfoujols committed Jul 10, 2024
2 parents cedb536 + b5b2e82 commit 7c20741
Show file tree
Hide file tree
Showing 3 changed files with 110 additions and 2 deletions.
14 changes: 13 additions & 1 deletion docs/build/dataservice-crud.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,18 @@ Il est basé sur l'objet PDO de PHP.

Le CRUD (Create, Read, Update, Delete) est un ensemble d'opérations de base pour la gestion des données dans une base de données.

### Schéma de la base de données

Pour les exemples suivants, nous allons utiliser une table `user` avec les champs `id`, `name` et `email`.

```sql
CREATE TABLE `user` (
`id` INT AUTO_INCREMENT PRIMARY KEY,
`name` VARCHAR(50) NOT NULL,
`email` VARCHAR(50) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
```

### Create

Pour créer un nouvel enregistrement dans la base de données, vous devez utiliser la méthode `insert` de la classe `DatabaseService`.
Expand All @@ -32,7 +44,7 @@ Pour créer un nouvel enregistrement dans la base de données, vous devez utilis
// Recupere l'object PHP PDO
$comBase = DatabaseService::getConnect();
// Requete SQL
$statementPDO = $comBase->insert("INSERT INTO user (name, email) VALUES ('John Doe', 'ben@toto.fr')");
$statementPDO = $comBase->query("INSERT INTO user (name, email) VALUES ('John Doe', 'ben@toto.fr')");
```

### Read
Expand Down
80 changes: 79 additions & 1 deletion docs/build/use-case-ville-refactor.md
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,85 @@ villedelete:
httpMethod: [GET]
```

Vous devez maintenant changer les noms dans les fichiers de controller et de vue.
Et... aussi les appeler par leur nom ! En effet, vous pouvez dynamiquement les appeler par leur nom plutôt
que par leur uri.

Le nom est affiché dans le fichier `app\Config\routes.yaml`

Dans le fichier VilleCreateController.php, vous devez ajouter :

```diff
<?php

namespace Controller;

use Studoo\EduFramework\Core\Controller\ControllerInterface;
use Studoo\EduFramework\Core\Controller\Request;
use Studoo\EduFramework\Core\Service\DatabaseService;
use Studoo\EduFramework\Core\View\TwigCore;
use Twig\Error\LoaderError;
use Twig\Error\RuntimeError;
use Twig\Error\SyntaxError;
++ use Studoo\EduFramework\Core\Controller\Route;

class VilleCreateController implements ControllerInterface
{
public function execute(Request $request): string|null
{
if ($request->getHttpMethod() === 'POST') {
$comBase = DatabaseService::getConnect();
$statementPDO = $comBase->prepare("INSERT INTO ville (nom, code_postal, nombre_habitant) VALUES (:nom, :code_postal, :nb_habitant)");
$statementPDO->execute([
'nom' => $request->get('nom'),
'code_postal' => $request->get('code_postal'),
'nb_habitant' => (int) $request->get('nombre_habitant')
]);

-- header('Location: /villeread');
++ header('Location: ' . (new Route())->getNameToPath('villeread'));
}

return TwigCore::getEnvironment()->render('villecreate/villecreate.html.twig',
[
"titre" => 'VilleCreateController',
"request" => $request
]
);
}
}
```

Dans le fichier `villecreate.html.twig`, vous devez ajouter :

```diff
{% extends "base.html.twig" %}

{% block title %}{{ titre }}{% endblock %}

{% block content %}
<h1>{{ titre }}</h1>

-- <form method="post" action="/villecreate">
++ <form method="post" action="{{ getNameToPath('villecreate') }}">
<div class="form-group">
<label for="nom">Ville</label>
<input type="text" class="form-control" id="nom" name="nom">
</div>
<div class="form-group">
<label for="code_postal">Code postal</label>
<input type="text" class="form-control" id="code_postal" name="code_postal">
</div>
<div class="form-group">
<label for="nombre_habitant">Nombre d'habitant</label>
<input type="text" class="form-control" id="nombre_habitant" name="nombre_habitant">
</div>
<button type="submit" class="btn btn-primary">Enregistrer</button>
</form>

{% endblock %}
```

Vous devez maintenant changer les noms dans les fichiers de controller et de vue. A vous de jouer !

> Vérifier en rejouant le CRUD de ville si les routes sont bien configurées.
> {style="warning"}
Expand Down
18 changes: 18 additions & 0 deletions docs/build/use-case-ville.md
Original file line number Diff line number Diff line change
Expand Up @@ -293,6 +293,24 @@ php bin/edu make:controller villeUpdate

Voici l'arborescence du projet :

``` hl_lines="7 12 13"
├── app
│ ├── Config
│ │ └── routes.yaml
│ ├── Controller
│ │ ├── VilleCreateController.php
│ │ ├── VilleReadController.php
│ │ └── VilleUpdateController.php
│ └── Template
│ ├── base.html.twig
│ ├── villecreate
│ │ └── villecreate.html.twig
│ ├── villeupdate
│ │ └── villeupdate.html.twig
│ └── villeread
│ └── villeread.html.twig
```

Pour modifier une ville, nous devons gérer sa modification via son idenfifiant (clé primaire).

Dans notre use case, l'identifiant est ville.id.
Expand Down

0 comments on commit 7c20741

Please sign in to comment.