Symfony 4 - выбор_значения FormType не работает - PullRequest
0 голосов

Это метод в моем контроллере:

public function parentCat($parentId,$manOrWomen,Request $request){


        $pr=new Product();
        $products=$this->getDoctrine()->getRepository(Product::class)->listProductsParentCategory($parentId,$manOrWomen);
        $form=$this->createForm(SearchProductType::class,$pr,['parentId'=>$parentId,'manOrWomen'=>$manOrWomen]);
        $form->handleRequest($request);
        if($form->isSubmitted() && $form->isValid()){

            $price=$request->request->get('search_product','price');
            $name=$request->request->get('search_product','name');
            $products=$this->getDoctrine()->getRepository(Product::class)->listSearchedProd($parentId,$manOrWomen,$price['price']
            ,$name['name']);

            //$products=$this->getDoctrine()->getRepository(Product::class)->listSearchedProd($productPrice);
            return $this->render('list_products/index.html.twig',['controller_name' => 'ListProductsController',
                'form1'=>$form->createView(),'products'=>$products]);

        }
        else{
            return $this->render('list_products/index.html.twig',['controller_name' => 'ListProductsController','form1'=>$form->createView()
            ,'products'=>$products]);
        }


    }

Это мой класс Product (Pruduct Entity):

class Product
{
    /**
     * @ORM\Id()
     * @ORM\GeneratedValue()
     * @ORM\Column(type="integer")
     */
    private $id;

    /**
     * @ORM\Column(type="string", length=255)
     */
    private $name;

    /**
     * @ORM\Column(type="text")
     */
    private $description;

    /**
     *
     * @ORM\Column(type="string", length=255)
     * @Assert\Image(mimeTypes={"image/jpeg","image/png"})
     */
    private $image;

    /**
     * @ORM\Column(type="integer")
     */
    private $price;

    /**
     * @var Category[] | ArrayCollection
     * @ORM\ManyToOne(targetEntity="App\Entity\Category")
     * @ORM\JoinColumn(name="category_id", referencedColumnName="id")
     */
    private $category;



    /**
     * @var ManOrWomen[] | ArrayCollection
     * @ORM\ManyToOne(targetEntity="App\Entity\ManOrWomen")
     * @ORM\JoinColumn(name="manorwomen_id", referencedColumnName="id")
     */
    private $manorwomen;

    /**
     * @param \DateTime $createdDate
     *
     * @ORM\Column(name="createdDate", type="datetime")
     */
    private $createdDate;
    /**
     * Product constructor.
     */
    public function __construct()
    {
        $this->createdDate=new \DateTime('now');
        $this->category = new ArrayCollection();
        $this->manorwomen=new ArrayCollection();
        $this->undercategory=new ArrayCollection();
        $this->parentCategory=new ArrayCollection();
    }

    public function getId()
    {
        return $this->id;
    }

    public function getName()
    {
        return $this->name;
    }

    public function setName($name): self
    {
        $this->name = $name;

        return $this;
    }

    public function getDescription(): ?string
    {
        return $this->description;
    }

    public function setDescription(string $description): self
    {
        $this->description = $description;

        return $this;
    }

    public function getImage(): ?string
    {
        return $this->image;
    }

    public function setImage(string $image): self
    {
        $this->image = $image;

        return $this;
    }

    public function getPrice()
    {
        return $this->price;
    }

    public function setPrice($price): self
    {
        $this->price = $price;

        return $this;
    }

    /**
     * @return Category[]|ArrayCollection
     */
    public function getCategory()
    {
        return $this->category;
    }

    /**
     * @param Category[]|ArrayCollection $category
     */
    public function setCategory($category): void
    {
        $this->category = $category;
    }

    /**
     * @return ManOrWomen[]|ArrayCollection
     */
    public function getManorwomen()
    {
        return $this->manorwomen;
    }

    /**
     * @param ManOrWomen[]|ArrayCollection $manorwomen
     */
    public function setManorwomen($manorwomen): void
    {
        $this->manorwomen = $manorwomen;
    }

    /**
     * @return DateTime
     */
    public function getCreatedDate(): DateTime
    {
        return $this->createdDate;
    }

    /**
     * @param DateTime $createdDate
     */
    public function setCreatedDate(DateTime $createdDate): void
    {
        $this->createdDate = $createdDate;
    }

Это мой FormType для класса Product:

public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $parentId = $options['parentId'];
        $manOrWomen=$options['manOrWomen'];
        $builder
            ->add('price',EntityType::class,[
                'class'=>Product::class,
                'choice_label'=>'price',
                'choice_value' => 'price',
                'placeholder'=>'Default',
                'query_builder' => function (EntityRepository $er) use ($parentId,$manOrWomen) {
                    return $er->createQueryBuilder('product')
                        ->innerJoin('product.category','c')
                        ->addSelect('c')
                        ->innerJoin('product.manorwomen','m')
                        ->addSelect('m')
                        ->where('c.parent_id=:parentId')
                        ->andWhere('m.id=:manOrWomen')
                        ->setParameters(['parentId'=>$parentId,'manOrWomen'=>$manOrWomen]);


                },
                'expanded'=>false,
                'multiple'=>false
            ])
            ->add('name',EntityType::class,[
                'class'=>Product::class,
                'choice_label'=>'name',
                'choice_value' => 'name',
                'placeholder'=>'Default',
                'query_builder' => function (EntityRepository $er) use ($parentId,$manOrWomen) {
                    return $er->createQueryBuilder('product')
                        ->innerJoin('product.category','c')
                        ->addSelect('c')
                        ->innerJoin('product.manorwomen','m')
                        ->addSelect('m')
                        ->where('c.parent_id=:parentId')
                        ->andWhere('m.id=:manOrWomen')
                        ->setParameters(['parentId'=>$parentId,'manOrWomen'=>$manOrWomen]);


                },
                'expanded'=>false,
                'multiple'=>false
            ])
            ->add('submit',SubmitType::class)
        ;
    }

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults([
            'data_class' => Product::class
        ]);
        $resolver->setRequired(
            ['parentId','manOrWomen']
        );
    }

У меня проблема с запросом:

enter image description here

"цена" => "44" (это цена для текущегоitem.Это хорошо.) "name" => "44" (Это должно быть имя текущего элемента.)

У меня есть 'choice_value' => 'name', но вместо имени я получаю цену.

Если я изменю первое choice_value на другое значение, второе choice_value станет равным ей.У меня та же проблема - тринадцатое значение EntityType становится равным второму значению ('name').

1 Ответ

0 голосов
/ 25 мая 2018

Я бы сказал, что ваша сущность возвращает цену в получателе имени, или установщик цены устанавливает значение имени.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...