Installer doctrine avec Composer
Jusqu'à présent nous avons travaillé sans base de données, composante essentielle d'un projet vu qu'elle garde en mémoire toutes les informations du projet.
Nous allons désormais voir comment installer et utiliser l'ORM de choix de Symfony : Doctrine
De toute manière vos sites vont avoir besoin d'une base de donnée dans 90% des cas, donc on est un petit peu obligé de passer par là...
Attendez une petite minute, Symfony n'embarque pas de moyen de se connecter à la base par défaut ?
Non, pas du tout ! Symfony est un framework et se concentre principalement sur cet aspect là : Rendre le développement plus rapide et robuste
Donc maintenir un ORM en plus peut demander beaucoup de temps et d'efforts, ce que les mainteneurs ne sont pas prêt à faire.
Pour se faire, Symfony utilise un de ses meilleurs amis : Doctrine l'ORM surpuissant en PHP.
Donctrine peut se connecter à beaucoup de bases SQL différentes telles que :
- Mysql
- Mariadb
- Postgesql
- Sqlite
- ... et encore bien d'autres
Vous le verrez par vous même, c'est une bonne chose d'avoir cet ORM sous la main pour construire votre projet.
Installer doctrine
Pas de panique ici, la communauté Symfony s'est occupé de tout pour rendre l'installation la plus simple possible, ouvrez un terminal dans votre projet et tapez cette commande :
composer require doctrine
Grâce à Symfony flex, nous avons juste besoin de configurer notre accès à la base de donnée pour s'y connecter !
Contigurer la connexion à la base de données
Pour configurer les accès, ouvrez le fichier .env
à la racine de votre projet, vous devriez avoir quelque chose comme ça :
# In all environments, the following files are loaded if they exist,
# the later taking precedence over the former:
#
# * .env contains default values for the environment variables needed by the app
# * .env.local uncommitted file with local overrides
# * .env.$APP_ENV committed environment-specific defaults
# * .env.$APP_ENV.local uncommitted environment-specific overrides
#
# Real environment variables win over .env files.
#
# DO NOT DEFINE PRODUCTION SECRETS IN THIS FILE NOR IN ANY OTHER COMMITTED FILES.
#
# Run "composer dump-env prod" to compile .env files for production use (requires symfony/flex >=1.2).
# https://symfony.com/doc/current/best_practices/configuration.html#infrastructure-related-configuration
###> symfony/framework-bundle ###
APP_ENV=dev
APP_SECRET=eb8499147c01765bb792dbd8f5546733
#TRUSTED_PROXIES=127.0.0.1,127.0.0.2
#TRUSTED_HOSTS='^localhost|example\.com$'
###< symfony/framework-bundle ###
###> doctrine/doctrine-bundle ###
# Format described at https://www.doctrine-project.org/projects/doctrine-dbal/en/latest/reference/configuration.html#connecting-using-a-url
# For an SQLite database, use: "sqlite:///%kernel.project_dir%/var/data.db"
# Configure your db driver and server_version in config/packages/doctrine.yaml
DATABASE_URL=mysql://db_user:db_password@127.0.0.1:3306/db_name
###< doctrine/doctrine-bundle ###
Ce qui nous interesse est à la fin entre les tags doctrine/doctrine-bundle
, ce qui nous interesse particulièrement c'est DATABASE_URL.
** Comment générer son database url ?**
Rien de très compliqué, cela ce forme de cette façon là :
// Schema
{driver}://{utilisateur}:{motdepasse}@{ip ou adresse de l'hôte}:{port}/{nom de la base de donnée}
// Exemple avec Mamp
mysql://root:root@localhost:8889/lebonkoin
// Exemple avec Xampp
mysql://root:@localhost:3306/lebonkoin
Il est possible qu'avec xampp il vous embête, vous pouvez remplacer DATABASE_URL par ça :
DB_USER=root
DB_PASSWORD=
DB_HOST=localhost
DB_PORT=3306
DB_NAME=lebonkoin
DATABASE_URL=mysql://${DB_USER}:${DB_PASSWORD}@${DB_HOST}:${DB_PORT}/${DB_NAME}
Et là ça devrait fonctionner correctement en cas de soucis.
Configurer la connexion à la base de donnée
Maintenant que l'on a renseigné toutes les informations, on va pouvoir changer certaines choses dans la base.
Pour se faire, la receipe de doctrine, nous a mis quelques fichiers à disposition, dont config/package/doctrine.yaml
Le fichier devrait ressembler à ça :
doctrine:
dbal:
# configure these for your database server
driver: 'pdo_mysql'
server_version: '5.7'
charset: utf8mb4
default_table_options:
charset: utf8mb4
collate: utf8mb4_unicode_ci
url: '%env(resolve:DATABASE_URL)%'
orm:
auto_generate_proxy_classes: true
naming_strategy: doctrine.orm.naming_strategy.underscore
auto_mapping: true
mappings:
App:
is_bundle: false
type: annotation
dir: '%kernel.project_dir%/src/Entity'
prefix: 'App\Entity'
alias: App
Ici pas besoin de changer grand chose, le driver pdo_mysql nous ira très bien vu que nous sommes sur du mysql !
Notez la syntaxe pour récupérer DATABASE_URL vous pouvez faire de même avec des variables que vous avez vous même défini dans le fichier
.env
Je vous laisse trifouiller la documentation ou tester par vous même pour les autres configurations
Créer la base de données
Pas de panique si vous avez pas de base de données portant se nom, symfony va la créer pour vous avez la commande :
php bin/console doctrine:database:create
Si tout vas bien, vous devirez avoir un petit message vous disant que la base a bien été créer.
Sinon, vous devez avoir des grosses erreures rouges, vérifiez vos identifiants de connexion et voir si la base de donnés est disponible !
Conclusion
Maintenant que doctrine est installé, nous allons pouvoir créer des éléments permettant d'intéragir avec !
N'oubliez pas d'allumer xampp / mamp et votre base de données