symfony:form
Genere un FormType Symfony avec contraintes de validation et options
- License 许可
- MIT
- 最近更新
- 2026-03-02
- Stars
- ★ 0
- Forks
- 0
01 前言 Front Matter
- name
- symfony:form
- model
- sonnet
- license
- MIT
- version
- 1.0.0
- description
- Genere un FormType Symfony avec contraintes de validation et options
- allowed-tools
- [ "AskUserQuestion", "Bash", "Read", "Write", "Edit", "Grep", "Glob" ]
02 资源文件 1
- 参考文档evals/triggers.json1.6 KB
03 SKILL.md 正文
Symfony Form Skill
Genere un FormType Symfony complet avec champs types, contraintes de validation, options et bonnes pratiques.
Variables
- {FormName} - Nom du formulaire en PascalCase (ex: ProductType)
- {namespace} - Namespace du projet (defaut: App)
- {fields} - Liste des champs avec types et contraintes
Outputs
src/Form/{FormName}.php
Instructions a Executer
IMPORTANT : Execute ce workflow etape par etape :
1. Demander le nom du formulaire
- Utilise AskUserQuestion pour demander :
Question: "Quel est le nom du formulaire ? (ex: Product, UserRegistration)" Header: "Formulaire" - Ajoute le suffixe
Typesi absent - Stocke dans FormName
2. Demander les champs
- Utilise AskUserQuestion pour demander :
Question: "Quels champs ? Format: name:TextType,email:EmailType,price:MoneyType,category:EntityType:Category,description:TextareaType:nullable" Header: "Champs" - Parse la liste des champs :
name:FieldType— champ simplename:EntityType:TargetEntity— champ relation Doctrinename:Type:nullable— champ nullable
3. Demander les options avancees
- Utilise AskUserQuestion (multiSelect: true) pour demander :
Question: "Quelles options activer ?" Header: "Options" Options: - "Data class binding" : "Lier le formulaire a une classe PHP (entite/DTO)" - "CSRF protection" : "Protection CSRF explicite (active par defaut dans Symfony)" - "Validation groups" : "Groupes de validation pour valider conditionnellement"
4. Si Data class : demander la classe
- Utilise AskUserQuestion pour demander :
Question: "Quelle est la classe de donnees liee ? (ex: App\Entity\Product, App\Dto\ProductInput)" Header: "Data class"
5. Detecter le namespace du projet
- Lis
composer.jsonavec Read - Extrais le namespace depuis
autoload.psr-4 - Si non trouve, utilise
Apppar defaut
6. Generer le FormType
- Cree le fichier
src/Form/{FormName}.phpavec Write - Structure de classe :
<?php
declare(strict_types=1);
namespace {namespace}\Form;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Validator\Constraints as Assert;
final class {FormName} extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options): void
{
$builder
->add('name', TextType::class, [
'label' => 'Nom',
'constraints' => [
new Assert\NotBlank(),
new Assert\Length(max: 255),
],
])
;
}
public function configureOptions(OptionsResolver $resolver): void
{
$resolver->setDefaults([
'data_class' => EntityClass::class,
]);
}
}
Regles de generation :
- Classe
finaletendantAbstractType - Chaque champ a un type explicite (pas de devinette)
- Contraintes de validation inline via
constraints(pas d'annotations sur l'entite) - Types de champs Symfony utilises :
TextType,EmailType,PasswordType,TextareaTypeIntegerType,MoneyType,NumberType,PercentTypeChoiceType,EntityType,EnumTypeDateType,DateTimeType,TimeTypeCheckboxType,FileType,HiddenTypeCollectionType,RepeatedType
- Pour
EntityType: ajouterclass,choice_label,query_buildersi necessaire - Pour
ChoiceType: ajouterchoicesavec les valeurs - Si validation groups : ajouter
'validation_groups'dansconfigureOptions - Labels explicites pour chaque champ
7. Afficher le resume
Affiche :
FormType {FormName} genere avec succes
Fichiers crees :
- src/Form/{FormName}.php
Champs :
{liste des champs avec types}
Utilisation dans un controleur :
$form = $this->createForm({FormName}::class, $entity);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
// Traitement
}
Prochaines etapes :
- Ajuster les contraintes de validation
- Personnaliser les labels et placeholders
- Ajouter un template Twig si necessaire
Patterns appliques
FormType
- Classe
final, extendsAbstractType - Types de champs explicites
- Contraintes de validation inline (
constraintsoption) configureOptions()pour data_class et defaults- Labels explicites
Notes
- Preferer les contraintes inline (
constraintsdans les options du champ) aux annotations sur l'entite - Toujours specifier le type de champ explicitement (pas de type-guessing)
- Utiliser
Assert\alias pour les contraintes - Pour les relations Doctrine, utiliser
EntityTypeavecquery_builderpour filtrer CollectionTypepour les relations one-to-many editables
04 同仓库更多 Skills
twig:make-component
Génère un Twig Component Symfony UX (classe PHP + template Twig)
tester:ui-test
Teste automatiquement une interface utilisateur dans Chrome : navigation, clics, validation visuelle, tests fonctionnels, responsive, comportement et debug. Génère un rapport détaillé avec screenshots et optionnellement un GIF du parcours.
symfony:voter
Genere un Voter de securite Symfony pour le controle d'acces granulaire
symfony:message
Genere un Message Symfony Messenger avec son Handler pour traitement asynchrone
symfony:mailer
Genere un email Symfony (TemplatedEmail ou Notification) avec template Twig
symfony:event
Genere un Event Symfony + EventSubscriber ou EventListener