Skip to content
Back to skills

Create Form Type

ASecurity

Create the Symfony form type for an entity's add/edit form. Covers standard field types, translatable fields, money fields, file uploads, and choice providers. For multi-tab layout with NavigationTabType, see create-form-tab-layout. Trigger: "create form type for {Domain}".

  • 6 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added May 29, 2026
ai-agentsgophp

Security analysis

A100/100

Scanned May 29, 2026

npx -y skills add jeffsenso/prestashop-skills --skill create-form-type --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Create Form Type?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Create Form Type
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/jeffsenso-create-form-type/badge)](https://www.skillsdirectory.com/skills/jeffsenso-create-form-type)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: create-form-type
description: >
  Create the Symfony form type for an entity's add/edit form. Covers standard field
  types, translatable fields, money fields, file uploads, and choice providers.
  For multi-tab layout with NavigationTabType, see create-form-tab-layout.
  Trigger: "create form type for {Domain}".
needs: [create-cqrs-commands, create-cqrs-queries]
produces: "{Domain}Type.php + choice providers — Symfony form structure for add/edit"
subagent: optional
---

# create-form-type

Read `@.ai/Component/Forms/CONTEXT.md` for form conventions (base classes, data flow, service registration).

## 1. Root form type

Create `src/PrestaShopBundle/Form/Admin/{Section}/{Domain}/{Domain}Type.php`:

- Extend `TranslatorAwareType` (provides `$this->trans()`) or `AbstractType` for simple forms
- `buildForm()`: add all fields for the entity
- `configureOptions()`: set defaults as needed
- Form types define structure and validation only — no knowledge of commands/queries

**Reference:** `src/PrestaShopBundle/Form/Admin/Improve/International/Tax/TaxType.php` (simple), `src/PrestaShopBundle/Form/Admin/Sell/Catalog/Manufacturer/ManufacturerType.php` (with image)

## 2. Standard field types

| 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` | |

## 3. Translatable fields

For multilingual fields (entity has `_lang` table):

```php
->add('name', TranslatableType::class, [
    'type' => TextType::class,
    'options' => ['constraints' => [new NotBlank()]],
])
```

- `TranslatableType` renders one input per active shop language
- Submitted data: `['name' => [1 => 'English', 2 => 'French']]`
- Map to command's `setLocalizedNames()` setter in the DataHandler

For translatable textareas: wrap `TextareaType` or `FormattedTextareaType`.

## 4. Money / price fields

For monetary fields (see [Forms/CONTEXT.md](../../CONTEXT.md) for decimal scale convention):

- Static currency: `MoneyType::class` with `'currency' => $defaultCurrencyIsoCode`
- Multi-currency: PS-specific `AmountType` if available
- Use appropriate transformers to convert between form display and storage

## 5. Choice providers

For select fields with dynamic options from DB:

- Create `{Domain}{Field}ChoiceProvider.php` implementing `ChoiceProviderInterface`
- Inject repository or DBAL connection
- `getChoices(): array` — return `['Label' => value]` array
- Inject into the form type and pass as `choices` option

**Reference:** `src/Core/Form/ChoiceProvider/` (61+ existing providers)

## 6. File upload fields

For image/logo uploads (see [Forms/CONTEXT.md](../../CONTEXT.md) for file upload conventions):

- Add `FileType::class` with `'mapped' => false, 'required' => false`
- Add `File` constraint with allowed MIME types
- Display existing image in the edit template via custom Twig block

## Rules

Conventions (base classes, file uploads, choice providers, NavigationTabType) are in [Forms/CONTEXT.md](../../CONTEXT.md). Skill-specific reminders:

- Add Symfony validation constraints directly on form fields (`NotBlank`, `Length`, `Regex`)
- For multi-tab layout, use the `create-form-tab-layout` skill instead

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.