symfonyform
Genere un FormType Symfony avec contraintes de validation et options
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
メニュー
Genere un FormType Symfony avec contraintes de validation et options
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
SOC 職業分類に基づく
Audite un projet API Platform existant et produit un rapport de bonnes pratiques, performances et sécurité
Génère des DTOs (input/output) API Platform avec mapping vers les entités
Génère des filtres API Platform (search, date, range, order, boolean, exists, custom)
Génère un State Processor API Platform pour personnaliser la persistence des données
Génère un State Provider API Platform pour personnaliser la récupération de données
Génère une API Resource complète avec attribut
| name | symfony:form |
| description | Genere un FormType Symfony avec contraintes de validation et options |
| model | sonnet |
| allowed-tools | ["AskUserQuestion","Bash","Read","Write","Edit","Grep","Glob"] |
| version | 1.0.0 |
| license | MIT |
Genere un FormType Symfony complet avec champs types, contraintes de validation, options et bonnes pratiques.
src/Form/{FormName}.phpIMPORTANT : Execute ce workflow etape par etape :
Question: "Quel est le nom du formulaire ? (ex: Product, UserRegistration)"
Header: "Formulaire"
Type si absentQuestion: "Quels champs ? Format: name:TextType,email:EmailType,price:MoneyType,category:EntityType:Category,description:TextareaType:nullable"
Header: "Champs"
name:FieldType — champ simplename:EntityType:TargetEntity — champ relation Doctrinename:Type:nullable — champ nullableQuestion: "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"
Question: "Quelle est la classe de donnees liee ? (ex: App\Entity\Product, App\Dto\ProductInput)"
Header: "Data class"
composer.json avec Readautoload.psr-4App par defautsrc/Form/{FormName}.php avec Write<?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 :
final etendant AbstractTypeconstraints (pas d'annotations sur l'entite)TextType, EmailType, PasswordType, TextareaTypeIntegerType, MoneyType, NumberType, PercentTypeChoiceType, EntityType, EnumTypeDateType, DateTimeType, TimeTypeCheckboxType, FileType, HiddenTypeCollectionType, RepeatedTypeEntityType : ajouter class, choice_label, query_builder si necessaireChoiceType : ajouter choices avec les valeurs'validation_groups' dans configureOptionsAffiche :
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
final, extends AbstractTypeconstraints option)configureOptions() pour data_class et defaultsconstraints dans les options du champ) aux annotations sur l'entiteAssert\ alias pour les contraintesEntityType avec query_builder pour filtrerCollectionType pour les relations one-to-many editables