create-form-type — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited create-form-type (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Read @.ai/Component/Forms/CONTEXT.md for form conventions (base classes, data flow, service registration).
Create src/PrestaShopBundle/Form/Admin/{Section}/{Domain}/{Domain}Type.php:
TranslatorAwareType (provides $this->trans()) or AbstractType for simple formsbuildForm(): add all fields for the entityconfigureOptions(): set defaults as neededReference: src/PrestaShopBundle/Form/Admin/Improve/International/Tax/TaxType.php (simple), src/PrestaShopBundle/Form/Admin/Sell/Catalog/Manufacturer/ManufacturerType.php (with image)
| PS field concept | Symfony/PS type | Notes |
|---|---|---|
| Text | TextType | Standard input |
| Boolean toggle | SwitchType (PS-specific) | On/off switch |
| Select with static options | ChoiceType | Inline choices array |
| Select with dynamic options | ChoiceType + ChoiceProvider | See section 5 |
| Textarea / HTML | TextareaType or FormattedTextareaType |
For multilingual fields (entity has _lang table):
->add('name', TranslatableType::class, [
'type' => TextType::class,
'options' => ['constraints' => [new NotBlank()]],
])TranslatableType renders one input per active shop language['name' => [1 => 'English', 2 => 'French']]setLocalizedNames() setter in the DataHandlerFor translatable textareas: wrap TextareaType or FormattedTextareaType.
For monetary fields (see Forms/CONTEXT.md for decimal scale convention):
MoneyType::class with 'currency' => $defaultCurrencyIsoCodeAmountType if availableFor select fields with dynamic options from DB:
{Domain}{Field}ChoiceProvider.php implementing ChoiceProviderInterfacegetChoices(): array — return ['Label' => value] arraychoices optionReference: src/Core/Form/ChoiceProvider/ (61+ existing providers)
For image/logo uploads (see Forms/CONTEXT.md for file upload conventions):
FileType::class with 'mapped' => false, 'required' => falseFile constraint with allowed MIME typesConventions (base classes, file uploads, choice providers, NavigationTabType) are in Forms/CONTEXT.md. Skill-specific reminders:
NotBlank, Length, Regex)create-form-tab-layout skill instead~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.