with one click
add-form
Add an admin FormType for an existing Sylius Resource
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Menu
Add an admin FormType for an existing Sylius Resource
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Based on SOC occupation classification
Implement the fix described in a GitHub issue and open a Pull Request that closes it
Apply the latest review feedback to a Pull Request and push it to the PR branch
Add an admin autocomplete form type for a Sylius Resource (translatable or not), optionally injected into another form via an extension
Add an admin FormType for an existing Sylius Resource
Add a Sylius admin grid for an existing Sylius Resource
Add a multiple images collection (OneToMany) to an existing Sylius Resource
| name | add-form |
| description | Add an admin FormType for an existing Sylius Resource |
| argument-hint | [ModelName] |
| allowed-tools | AskUserQuestion, Bash, Read, Edit, Write, Glob, Grep |
Ask the user for the ModelName if not provided. Read src/**/Entity/{ModelName}/{ModelName}.php to detect the entity's fields.
Prerequisite: the model must already exist as a Sylius Resource (run /sylius-plugin:add-model first).
src/Form/Type/{ModelName}/{ModelName}Type.php:
<?php
declare(strict_types=1);
namespace $SYLIUS_NAMESPACE\Form\Type\{ModelName};
use Sylius\Bundle\ResourceBundle\Form\Type\AbstractResourceType;
use Symfony\Component\Form\FormBuilderInterface;
final class {ModelName}Type extends AbstractResourceType
{
public function buildForm(FormBuilderInterface $builder, array $options): void
{
$builder
// add fields based on the entity properties
;
}
public function getBlockPrefix(): string
{
return '${SYLIUS_PREFIX}_{model_snake}';
}
}
Read the entity fields and add the appropriate Symfony form types for each one (e.g. TextType, TextareaType, IntegerType, CheckboxType, etc.). Label each field with ${SYLIUS_PREFIX}.form.{model_snake}.{field}:
$builder
->add('name', TextType::class, [
'label' => '${SYLIUS_PREFIX}.form.{model_snake}.name',
])
->add('enabled', CheckboxType::class, [
'label' => '${SYLIUS_PREFIX}.form.{model_snake}.enabled',
])
;
Add to config/services.yaml:
services:
${SYLIUS_PREFIX}.form.type.{model_snake}:
class: $SYLIUS_NAMESPACE\Form\Type\{ModelName}\{ModelName}Type
arguments:
- '%${SYLIUS_PREFIX}.model.{model_snake}.class%'
- ['sylius']
tags:
- { name: form.type }
Edit config/resources/{model_snake}.yaml at the plugin root (the file created by /sylius-plugin:add-model). Add form: under the existing classes::
sylius_resource:
resources:
${SYLIUS_PREFIX}.{model_snake}:
driver: doctrine/orm
classes:
model: $SYLIUS_NAMESPACE\Entity\{ModelName}\{ModelName}
interface: $SYLIUS_NAMESPACE\Entity\{ModelName}\{ModelName}Interface
form: $SYLIUS_NAMESPACE\Form\Type\{ModelName}\{ModelName}Type
Get the project's default locale:
vendor/bin/console debug:container --parameter=kernel.default_locale
Add labels to translations/messages.{locale}.yaml under ${SYLIUS_PREFIX}.form.{model_snake}.{field} (one entry per field declared in the FormType):
${SYLIUS_PREFIX}:
form:
{model_snake}:
name: Name
enabled: Enabled
# one entry per field
vendor/bin/console cache:clear
vendor/bin/console debug:form "$SYLIUS_NAMESPACE\Form\Type\{ModelName}\{ModelName}Type" lists the declared fieldsvendor/bin/console debug:translation {locale} --domain=messages 2>&1 | grep '${SYLIUS_PREFIX}.form.{model_snake}' lists every field label you added./sylius-plugin:add-grid to add the admin index grid/sylius-plugin:add-routes and /sylius-plugin:add-menu to wire it into the admin/sylius-plugin:add-images if the model needs an images collection/sylius-plugin:add-autocomplete to expose the model as a searchable field in another form