From 298d2472a5473108454ed444f2a28650e22beff4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gr=C3=A9goire=20Paris?= <postmaster@greg0ire.fr> Date: Mon, 26 Feb 2018 23:32:35 +0100 Subject: [PATCH] Add slides for embeddables and custom types --- index.md | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/index.md b/index.md index b6836f7..65ca8e6 100644 --- a/index.md +++ b/index.md @@ -137,6 +137,52 @@ Note: - Doctrine Embeddables - Custom types +--- +### Les embeddables + +```php +use Doctrine\ORM\Annotation as ORM; + +class NiceArticle +{ + private $uuid; + + /** @ORM\Embedded(class = "ArticleContent") */ + private $articleContent; +} +``` + +Note: +- À utiliser en cas de Value Object composite +- Des soucis avec la nullabilité, contournables avec un package +- Ne peuvent contenir des colonnes complexes + +--- +### Les custom types + +```php +use Doctrine\DBAL\Platforms\AbstractPlatform as P; + +final class ArticleContentType extends Type +{ + public function convertToPHPValue($value, P $p): ArticleId + { + return new ArticleId($value); + } + + public function convertToDatabaseValue($value, P $p): string + { + return (string) $value; + } +} +``` + +Note: +- Permet de contrôler qu'on respecte toujours les règles métier à + l'hydratation. Si ça crashe, c'est qu'il manque des migrations. +- La méthode `getName()` fait doublon avec le nom utilisé lors de + l'enregistrement du type dans le registre de type, et disparaître dès Doctrine 3 + --- ### Les constructeurs nommés -- GitLab