Возможно ли в Sylius определить другой тип формы ресурса для указанного c маршрута? Здесь я определяю специфическую c форму App\Form\DishShop\AccountCartType
для этого маршрута:
rout.yaml
app_account_edit_dish_selection:
path: /dish-selection/edit/{tokenValue}
methods: [GET, POST, PUT]
defaults:
_controller: sylius.controller.order:updateAction
_sylius:
template: 'shop/index.html.twig'
form:
type: App\Form\DishShop\AccountCartType
options:
product: "expr:service('app.service.subscription_provider').getProduct()"
repository:
method: findOneBy
arguments: [tokenValue: $tokenValue]
state_machine:
graph: sylius_order_checkout
transition: edit
redirect: app_account_next_deliveries
event: dish_selection_changed
App \ Form \ DishShop \ AccountCartType
namespace App\Form\DishShop;
use App\EventSubscriber\Account\DishStockReservationUpdater;
use App\Service\Dish\DishStockReservationProvider;
use App\Validator\Constraints\NumberOfSelectedDishesIsCoherentWithPlan;
use Sylius\Bundle\ResourceBundle\Form\Type\AbstractResourceType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
final class AccountCartType extends AbstractResourceType
{
private DishStockReservationProvider $dishStockReservationProvider;
public function __construct(
DishStockReservationProvider $dishStockReservationProvider,
string $dataClass,
array $validationGroups = []
) {
parent::__construct($dataClass, $validationGroups);
$this->dishStockReservationProvider = $dishStockReservationProvider;
}
public function buildForm(FormBuilderInterface $builder, array $options): void
{
$builder
->add('subscriptionItem', PlanSelectionType::class, [
'product' => $options['product'],
])
->add('dishSelection', DishSelectionType::class, [
'constraints' => [
new NumberOfSelectedDishesIsCoherentWithPlan(),
],
])
->addEventSubscriber(new DishStockReservationUpdater($this->dishStockReservationProvider));
}
public function configureOptions(OptionsResolver $resolver): void
{
parent::configureOptions($resolver);
$resolver->setRequired('product');
}
}
services.yaml
services:
_defaults:
autowire: true
autoconfigure: true
public: false
app.form.dish_shop.account_cart_type:
class: App\Form\DishShop\AccountCartType
arguments:
$dataClass: '%sylius.model.order.class%'
$validationGroups: '%sylius.form.type.cart.validation_groups%'
tags:
- { name: form.type }
Но когда я отправляю форму, я получаю эту ошибку:
Невозможно проверить, действительна ли отправленная форма. Вызовите Form :: isSubmitted () перед Form :: isValid ().
Итак, есть способ сообщить Sylius, что для only для этого указанного c маршрута вам следует использовать этот тип формы?