Doctrine et Symfony¶
ORM Doctrine¶
ORM¶
ORM signifie Object-Relationnal Mapper. Un ORM sert à offrir une couche d’abstraction de connexion à toutes les BD relationnelles (comme PDO) mais aussi des facilités pour réaliser les requêtes courantes sans descendre au niveau des requêtes SQL et pour générer automatiquement des entités dans le langage utilisé avec les getters et setters correspondants.
installation¶
Il suffit de taper :
composer req orm
pour disposer de l’installation de l’ORM standard de Symfony qui est Doctrine Voir sa documentation
symfony maker-bundle¶
Il permet de fabriquer des entités, des contrôleurs, des CRUD, des tests etc.
installation¶
composer req maker-bundle --dev
sous-commandes disponibles¶
php bin/console list make
ce qui donne :
Symfony 5.0.7 (env: dev, debug: true)
Usage:
command [options] [arguments]
Options:
-h, --help Display this help message
-q, --quiet Do not output any message
-V, --version Display this application version
--ansi Force ANSI output
--no-ansi Disable ANSI output
-n, --no-interaction Do not ask any interactive question
-e, --env=ENV The Environment name. [default: "dev"]
--no-debug Switches off debug mode.
-v|vv|vvv, --verbose Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
Available commands for the "make" namespace:
make:auth Creates a Guard authenticator of different flavors
make:command Creates a new console command class
make:controller Creates a new controller class
make:crud Creates CRUD for Doctrine entity class
make:entity Creates or updates a Doctrine entity class, and optionally an API Platform resource
make:fixtures Creates a new class to load Doctrine fixtures
make:form Creates a new form class
make:functional-test Creates a new functional test class
make:message Creates a new message and handler
make:messenger-middleware Creates a new messenger middleware
make:migration Creates a new migration based on database changes
make:registration-form Creates a new registration form system
make:reset-password Create controller, entity, and repositories for use with symfonycasts/reset-password-bundle.
make:serializer:encoder Creates a new serializer encoder class
make:serializer:normalizer Creates a new serializer normalizer class
make:subscriber Creates a new event subscriber class
make:twig-extension Creates a new Twig extension class
make:unit-test Creates a new unit test class
make:user Creates a new security user class
make:validator Creates a new validator and constraint class
make:voter Creates a new security voter class
Entités¶
Créons une entité Personne
de ce type :

php bin/console make:entity
Répondez aux questions pour ajouter des champs nom et prenom de type string dans
Personne
.Vérifiez la création du code correspondant dans src/Entity.
<?php
namespace App\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity(repositoryClass="App\Repository\PersonneRepository")
*/
class Personne
{
/**
* @ORM\Id()
* @ORM\GeneratedValue()
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\Column(type="string", length=255)
*/
private $nom;
/**
* @ORM\Column(type="string", length=255)
*/
private $prenom;
public function getId(): ?int
{
return $this->id;
}
public function getNom(): ?string
{
return $this->nom;
}
public function setNom(string $nom): self
{
$this->nom = $nom;
return $this;
}
public function getPrenom(): ?string
{
return $this->prenom;
}
public function setPrenom(string $prenom): self
{
$this->prenom = $prenom;
return $this;
}
}
Config¶
Réglons la configuration de la base dans .env sur SQLite:
###> doctrine/doctrine-bundle ###
DATABASE_URL=sqlite:///%kernel.project_dir%/var/carnet.db?charset=utf8mb4
###< doctrine/doctrine-bundle ###
Interaction avec la BD¶
Initialisons la base :
./bin/console doctrine:database:create
./bin/console doctrine:schema:update --force
easy_admin¶
Pour faciliter l’interaction avec la BD, installons easy_admin :
composer req admin
Puis visitez : localhost:8000/admin
Nous obtenons une erreur, complétons donc config/packages/easy_admin.yaml :
easy_admin:
entities:
# List the entity class name you want to manage
- App\Entity\Personne
et vous pourrez ensuite ajouter facilement des personnes dans l’admin !
générateur de CRUD¶
Nous aurions pu aussi utiliser le générateur de CRUD :
php bin/console make:crud
en choisissant l’entité Personne
.
Cela fabrique automatiquement un CRUD avec le contrôleur et les templates nécessaires. Intéressant pour inspecter le code généré même si visuellement easy_admin est plus abouti …
profiler¶
Puis installons la barre du profiler :
composer req profiler
Pour tester le CRUD et le profiler : localhost:8000/personne
On obtient :
debug des routes¶
On peut lister toutes les routes :
php bin/console debug:router
et obtenir en particulier :
Name |
Method |
Scheme |
Host |
Path |
---|---|---|---|---|
personne_index |
GET |
ANY |
ANY |
/personne/ |
personne_new |
GET|POST |
ANY |
ANY |
/personne/new |
personne_show |
GET |
ANY |
ANY |
/personne/{id} |
personne_edit |
GET|POST |
ANY |
ANY |
/personne/{id}/edit |
personne_delete |
DELETE |
ANY |
ANY |
/personne//{id} |
easyadmin |
ANY |
ANY |
ANY |
/admin |
sécurité¶
On peut utiliser le security-checker pour vérifier tous les bundles installés :
composer require sec-checker --dev