src/Form/Website/Site/AddToCartType.php line 14

Open in your IDE?
  1. <?php
  2. namespace App\Form\Website\Site;
  3. use App\Entity\Website\Product\Product;
  4. use App\Entity\Website\Product\ProductPrice;
  5. use Symfony\Component\Form\AbstractType;
  6. use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
  7. use Symfony\Component\Form\Extension\Core\Type\HiddenType;
  8. use Symfony\Component\Form\Extension\Core\Type\IntegerType;
  9. use Symfony\Component\Form\FormBuilderInterface;
  10. use Symfony\Component\OptionsResolver\OptionsResolver;
  11. class AddToCartType extends AbstractType
  12. {
  13.     public function buildForm(FormBuilderInterface $builder, array $options): void
  14.     {
  15.         /**
  16.          * @var Product $product
  17.          * @var ProductPrice $productPriceObject
  18.          */
  19.         $product $options['product'];
  20.         $productPriceObject $options['productPriceObject'];
  21.         if ($productPriceObject) {
  22.             $selectedValues $productPriceObject->getSelectedValues();
  23.         }
  24.         foreach ($product->getProductAttributes() as $attribute) {
  25.             if ($attribute->isActive() && $attribute->getDeletedAt() === null) {
  26.                 $choices = [];
  27.                 $selectedValue null;
  28.                 foreach ($attribute->getProductAttributeValues() as $value) {
  29.                     if ($value->isActive() && $value->getDeletedAt() === null) {
  30.                         $choices[$value->getValue()] = $value->getValue();
  31.                         if ($productPriceObject) {
  32.                             if ($selectedValues->contains($value)) {
  33.                                 $selectedValue $value->getValue();
  34.                             }
  35.                         }
  36.                     }
  37.                 }
  38.                 $builder->add($attribute->getId(), ChoiceType::class, [
  39.                     'label' => $attribute->getName(),
  40.                     'label_attr' => ['class' => 'd-none'],
  41.                     'attr' => ['class' => 'd-none'],
  42.                     'choices' => $choices,
  43.                     'placeholder' => 'انتخاب کنید...',
  44.                     'mapped' => false,
  45.                     'required' => true,
  46.                     'data' => $selectedValue// مقدار پیش‌فرض
  47.                 ]);
  48.             }
  49.         }
  50.         $builder->add('quantity'IntegerType::class, [
  51.             'data' => 1,
  52.             'label' => 'تعداد',
  53.             'attr' => ['min' => 1],
  54.         ]);
  55.         $builder->add('product_price_id'HiddenType::class, [
  56.             'mapped' => false,
  57.             'required' => false,
  58.         ]);
  59.     }
  60.     public function configureOptions(OptionsResolver $resolver): void
  61.     {
  62.         $resolver->setRequired(['product']);
  63.         $resolver->setDefaults([
  64.             'product' => null,
  65.             'productPriceObject' => null,
  66.         ]);
  67.     }
  68. }