vendor/easycorp/easyadmin-bundle/src/Factory/FormFactory.php line 68

Open in your IDE?
  1. <?php
  2. namespace EasyCorp\Bundle\EasyAdminBundle\Factory;
  3. use EasyCorp\Bundle\EasyAdminBundle\Collection\FilterCollection;
  4. use EasyCorp\Bundle\EasyAdminBundle\Config\Action;
  5. use EasyCorp\Bundle\EasyAdminBundle\Config\KeyValueStore;
  6. use EasyCorp\Bundle\EasyAdminBundle\Context\AdminContext;
  7. use EasyCorp\Bundle\EasyAdminBundle\Dto\EntityDto;
  8. use EasyCorp\Bundle\EasyAdminBundle\Form\Type\CrudFormType;
  9. use EasyCorp\Bundle\EasyAdminBundle\Form\Type\FiltersFormType;
  10. use EasyCorp\Bundle\EasyAdminBundle\Router\AdminUrlGeneratorInterface;
  11. use Symfony\Component\Form\FormBuilderInterface;
  12. use Symfony\Component\Form\FormFactoryInterface;
  13. use Symfony\Component\Form\FormInterface;
  14. use Symfony\Component\HttpFoundation\Request;
  15. /**
  16.  * @author Javier Eguiluz <javier.eguiluz@gmail.com>
  17.  */
  18. final class FormFactory
  19. {
  20.     private FormFactoryInterface $symfonyFormFactory;
  21.     private AdminUrlGeneratorInterface $adminUrlGenerator;
  22.     public function __construct(FormFactoryInterface $symfonyFormFactoryAdminUrlGeneratorInterface $adminUrlGenerator)
  23.     {
  24.         $this->symfonyFormFactory $symfonyFormFactory;
  25.         $this->adminUrlGenerator $adminUrlGenerator;
  26.     }
  27.     public function createEditFormBuilder(EntityDto $entityDtoKeyValueStore $formOptionsAdminContext $context): FormBuilderInterface
  28.     {
  29.         $cssClass sprintf('ea-%s-form'$context->getCrud()->getCurrentAction());
  30.         $formOptions->set('attr.class'trim(($formOptions->get('attr.class') ?? '').' '.$cssClass));
  31.         $formOptions->set('attr.id'sprintf('edit-%s-form'$entityDto->getName()));
  32.         $formOptions->set('entityDto'$entityDto);
  33.         $formOptions->setIfNotSet('translation_domain'$context->getI18n()->getTranslationDomain());
  34.         return $this->symfonyFormFactory->createNamedBuilder($entityDto->getName(), CrudFormType::class, $entityDto->getInstance(), $formOptions->all());
  35.     }
  36.     public function createEditForm(EntityDto $entityDtoKeyValueStore $formOptionsAdminContext $context): FormInterface
  37.     {
  38.         return $this->createEditFormBuilder($entityDto$formOptions$context)->getForm();
  39.     }
  40.     public function createNewFormBuilder(EntityDto $entityDtoKeyValueStore $formOptionsAdminContext $context): FormBuilderInterface
  41.     {
  42.         $cssClass sprintf('ea-%s-form'$context->getCrud()->getCurrentAction());
  43.         $formOptions->set('attr.class'trim(($formOptions->get('attr.class') ?? '').' '.$cssClass));
  44.         $formOptions->set('attr.id'sprintf('new-%s-form'$entityDto->getName()));
  45.         $formOptions->set('entityDto'$entityDto);
  46.         $formOptions->setIfNotSet('translation_domain'$context->getI18n()->getTranslationDomain());
  47.         return $this->symfonyFormFactory->createNamedBuilder($entityDto->getName(), CrudFormType::class, $entityDto->getInstance(), $formOptions->all());
  48.     }
  49.     public function createNewForm(EntityDto $entityDtoKeyValueStore $formOptionsAdminContext $context): FormInterface
  50.     {
  51.         return $this->createNewFormBuilder($entityDto$formOptions$context)->getForm();
  52.     }
  53.     public function createFiltersForm(FilterCollection $filtersRequest $request): FormInterface
  54.     {
  55.         // filtering always returns to the index page of the same CRUD entity and with the same query parameters
  56.         $urlQueryParameters $request->query->all();
  57.         $actionUrl $this->adminUrlGenerator->setAll($urlQueryParameters)->setAction(Action::INDEX)->generateUrl();
  58.         $filtersForm $this->symfonyFormFactory->createNamed('filters'FiltersFormType::class, null, [
  59.             'method' => 'GET',
  60.             'action' => $actionUrl,
  61.             'ea_filters' => $filters,
  62.         ]);
  63.         return $filtersForm->handleRequest($request);
  64.     }
  65. }