Dev Playbook

Comment se fait une feature, stack par stack

Twig rend les pages, React prend la main là où il faut de l'interaction. PHP est la source de vérité, les types TS en descendent. symfony-react/symfony-guidelines.md et reactony.md

1

Modéliser le contrat backend

symfony-guidelines.md, Playbook 1, reactony.md §2

PHP est la source de vérité. Les types et la validation vivent sur l'entité, et tout le reste en découle.

src/Entity/SearchAlert.phpphp
<?php

class SearchAlert
{
    #[ORM\Id]
    #[ORM\GeneratedValue(strategy: 'IDENTITY')]
    #[ORM\Column]
    private ?int $id = null;  // privé et sans Groups : le Serializer l'ignore

    #[Assert\NotBlank]
    #[Assert\Count(min: 1)]
    #[Groups(['search_alert:read', 'search_alert:create'])]
    public array $channels = [];

    #[Assert\Email]
    #[Groups(['search_alert:create'])]
    public ?string $email = null;
}

Le piège. Charge utile 1:1 avec l'entité : l'entité directement. Sous-ensemble d'une grosse entité : un DTO allowlist plus ObjectMapper, pour la sécurité. Rien qui corresponde à une entité : un DTO simple.

1 / 12