create-form-tab-layout
This is NOT the default form pattern. Most entity forms are simple single-page forms using
TranslatorAwareTypeorAbstractType. Only useNavigationTabTypewhen the entity has many fields that benefit from tab organization (e.g. Carrier with general, shipping, size/weight tabs).
Instructions
- In root
{Domain}Type, declareNavigationTabTypeas the parent type viagetParent():
Then inpublic function getParent(): string { return NavigationTabType::class; }buildForm(), add each tab as a sub-form — each child is rendered as a tab. - Create one form type per tab:
{Domain}GeneralTabType.php,{Domain}ShippingTabType.php, etc. - Each tab type extends
TranslatorAwareTypewith its ownbuildForm()containing only that tab's fields. - Tab anchor IDs (used for JS error scrolling) are derived from the tab names.
Reference: src/PrestaShopBundle/Form/Admin/Shipping/Carrier/CarrierType.php, src/PrestaShopBundle/Form/Admin/Sell/Product/EditProductFormType.php
Rules
Conventions (NavigationTabType is PS-specific, tab anchor IDs for JS error nav) are in Forms/CONTEXT.md. Skill-specific reminders:
- Each tab gets its own form type class for maintainability
- Tab titles must use
$this->trans()for translation