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