<?php
// src/Form/EventSubscriber/PlanFeatureTypeSubscriber.php
namespace App\Form\EventSubscriber;
use App\Entity\BaseSite\Plan\PlanFeature;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\Form\Extension\Core\Type\IntegerType;
use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
use Symfony\Component\Form\FormEvent;
use Symfony\Component\Form\FormEvents;
class PlanFeatureTypeSubscriber implements EventSubscriberInterface
{
public static function getSubscribedEvents(): array
{
return [
FormEvents::PRE_SET_DATA => 'setupValueField',
FormEvents::PRE_SUBMIT => 'setupValueFieldFromSubmit',
];
}
public function setupValueField(FormEvent $event): void
{
$form = $event->getForm();
/** @var PlanFeature $data */
$data = $event->getData();
if (!$data || !$data->getFeature()) {
return;
}
$valueType = $data->getFeature()->getValueType();
$this->addValueField($form, $valueType);
}
public function setupValueFieldFromSubmit(FormEvent $event): void
{
$form = $event->getForm();
$data = $event->getData();
if (!isset($data['feature'])) {
return;
}
// تو این مرحله feature فقط آیدی هست، باید خود feature رو از DB بگیریم
// بسته به ساختار پروژه، شاید لازم باشه اینجا Doctrine رو تزریق کنیم
}
private function addValueField($form, string $valueType): void
{
if ($valueType === 'boolean') {
$form->add('value', CheckboxType::class, [
'label' => 'فعال باشد؟',
'required' => false,
]);
} else {
$form->add('value', IntegerType::class, [
'label' => 'مقدار عددی',
]);
}
}
}