form-advancedlisted
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'