Symfony 4 - choice_value FormType не работает

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

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]);
        }


    }

Это мой класс продукта (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']
        );
    }

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

Symfony 4 - choice_value FormType не работает

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

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

Если я заменю первое selection_value другим значением, второе selection_value станет равным ей. Почему?

Когда я удаляю addSelect из первого EntityType, работает нормально, но если я добавляю еще один EntityType, у меня возникает та же проблема - третье значение EntityType становится равным второму значению ('name').

Почему мы не используем id как значение?

Andrew Vakhniuk 25.05.2018 03:04

Предоставьте код для представления формы и модели продукта.

Will B. 25.05.2018 03:44

«Я хочу искать продукты по критериям», - добавил субъект Prduct.

Борислав Якимов 25.05.2018 09:55
JS - События опций формы
JS - События опций формы
В продолжение предыдущей статьи CSS - стили, связанные с вводом формы , в этой статье мы будем использовать JS для взаимодействия с формами, на этот...
CSS - Стили, связанные с вводом формы
CSS - Стили, связанные с вводом формы
Общими стилями ввода для форм являются Input (включая Text, Radio, checkbox), Select и Textarea, из которых Input относительно прост, поэтому в этой...
Создание многостраничной формы заявления о приеме на работу с помощью Angular
Создание многостраничной формы заявления о приеме на работу с помощью Angular
Наличие на корпоративном сайте форм заявлений о приеме на работу, или "трудовых анкет", экономит время и деньги как для соискателей, так и для...
0
3
840
1

Ответы 1

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

Изменен пост, добавлена ​​сущность Product.

Борислав Якимов 25.05.2018 09:57

Другие вопросы по теме