src/App/Form/Type/CustomEstimationType.php line 16

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\Form\Type;
  4. use App\Entity\Core\OrderItem;
  5. use App\Entity\ProductAttribute;
  6. use App\Entity\ProductAttributeItem;
  7. use Symfony\Component\DependencyInjection\ContainerInterface;
  8. use Symfony\Component\Form\AbstractType;
  9. use Symfony\Component\Form\Extension\Core\Type\IntegerType;
  10. use Symfony\Component\Form\FormBuilderInterface;
  11. use Symfony\Component\OptionsResolver\OptionsResolver;
  12. final class CustomEstimationType extends AbstractType
  13. {
  14.     private $container;
  15.     public function __construct(ContainerInterface $container)
  16.     {
  17.         $this->container $container;
  18.     }
  19.     public function buildForm(FormBuilderInterface $builder, array $options): void
  20.     {
  21.         $productAttributeItemRepository $this->container->get('doctrine')->getRepository(ProductAttributeItem::class);
  22.         $productAttributeRepository $this->container->get('doctrine')->getRepository(ProductAttribute::class);
  23.         $productAttributeItemOptions $productAttributeItemRepository->getProductAttributeItemsByProductAttribute();
  24.         $productAttributes $productAttributeRepository->getAsOptions();
  25.         $builder
  26.             ->add('productAttributeItems'CustomPartsType::class, [
  27.                 'class' => ProductAttributeItem::class,
  28.                 'mapped' => false,
  29.                 'parts' => $productAttributeItemOptions,
  30.                 'partOwners' => $productAttributes,
  31.                 'multiple' => true,
  32.                 'label' => false
  33.             ])
  34.             ->add('quantity'IntegerType::class, [
  35.                 'attr' => [
  36.                     'min' => 1,
  37.                     'value' => 1,
  38.                     'class' => 'h-100'
  39.                 ],
  40.                 'label' => 'sylius.ui.quantity'
  41.             ])
  42.         ;
  43.         if ($options['product'] && $options['product']->getByMetre()) {
  44.             $builder
  45.                 ->add('metres'IntegerType::class, [
  46.                     'attr' => [
  47.                         'min' => 1,
  48.                         'value' => 1,
  49.                         'class' => 'h-100'
  50.                     ],
  51.                     'label' => 'sylius.ui.quantity'
  52.                 ])
  53.             ;
  54.         }
  55.     }
  56.     public function configureOptions(OptionsResolver $resolver)
  57.     {
  58.         $resolver->setDefaults([
  59.             'data_class' => OrderItem::class,
  60.             'product'    => null
  61.         ]);
  62.     }
  63. }