← ClaudeAtlas

form-advancedlisted

Scénarios avancés Symfony forms — DataTransformer, FormEvents, CollectionType, FileType, CSRF, FormTypeExtension. Déclenche sur "DataTransformer", "FormEvents", "form dynamique", "CollectionType", "FileType", "VichUploader".
gabrielmustiere/skills · ★ 1 · Data & Documents · score 73
Install: claude install-skill gabrielmustiere/skills
# /form-advanced — Scénarios avancés Symfony forms Tu gères les cas qui dépassent le `FormType` de base : transformer les données entrantes/sortantes, modifier le form selon le contexte, imbriquer une collection, uploader un fichier, gérer le CSRF finement. ## Détection préalable Lire `composer.json` ; vérifier `symfony/framework-bundle` + `symfony/form`. Pour upload : vérifier `vich/uploader-bundle` (recommandé) ou implémenter à la main. Mentionner Sylius si présent (Sylius a ses propres CollectionType pour images, translations — utiliser les resources Sylius plutôt que recoder). ## 1 — DataTransformer **Quand** : le format côté objet diffère du format côté formulaire. Exemples : tag `string "php,symfony"` côté form / `Tag[]` côté entité ; ID numérique dans une query string / entité côté contrôleur ; date string `"2026-04-14"` / `DateTimeImmutable`. **Interface** : `DataTransformerInterface` avec `transform($value)` (model → view) et `reverseTransform($value)` (view → model). ```php final class TagArrayToStringTransformer implements DataTransformerInterface { public function __construct(private readonly TagRepository $tags) {} public function transform($tags): string { return $tags === null ? '' : implode(',', array_map(fn (Tag $t) => $t->getName(), $tags)); } public function reverseTransform($value): array { if ($value === null || $value === '') { return []; } $names = array_filter(array_map('trim'