Ожидаемый аргумент типа «строка», «App \ Entity \ Gouvernorat» указан в пути к свойству «gouvernorat» - PullRequest
0 голосов
/ 02 апреля 2019

Итак, в моей форме есть этот раскрывающийся список, который я пытаюсь заполнить из базы данных. Я хочу, чтобы в раскрывающемся списке отображались названия губернаторов и вставлялось имя выбранного в базу данных. У меня есть эта сущность под названием Gouvernorat:

<?php

namespace App\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity(repositoryClass="App\Repository\GouvernoratRepository")
 */
class Gouvernorat
{
    /**
     * @ORM\Id()
     * @ORM\GeneratedValue()
     * @ORM\Column(type="integer")
     */
    private $id;

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

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

    public function getNom(): ?string
    {
        return $this->nom;
    }

    public function setNom(string $nom): self
    {
        $this->nom = $nom;

        return $this;
    }
}

И еще одна называется стоянка:

<?php

namespace App\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity(repositoryClass="App\Repository\ParkingRepository")
 */
class Parking
{
    /**
     * @ORM\Id()
     * @ORM\GeneratedValue()
     * @ORM\Column(type="integer")
     */
    private $id;

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

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

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

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

    /**
     * @ORM\Column(type="date")
     */
    private $datemise;

    /**
     * @ORM\Column(type="boolean")
     */
    private $statue;

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

    /**
     * @ORM\ManyToOne(targetEntity="App\Entity\TypeParking")
     * @ORM\JoinColumn(nullable=true)
     */
    private $type;

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

    public function getLibelle(): ?string
    {
        return $this->libelle;
    }

    public function setLibelle(string $libelle): self
    {
        $this->libelle = $libelle;

        return $this;
    }



    public function getDelegation(): ?string
    {
        return $this->delegation;
    }

    public function setDelegation(string $delegation): self
    {
        $this->delegation = $delegation;

        return $this;
    }

    public function getAdresse(): ?string
    {
        return $this->adresse;
    }

    public function setAdresse(string $adresse): self
    {
        $this->adresse = $adresse;

        return $this;
    }

    public function getDatemise(): ?\DateTimeInterface
    {
        return $this->datemise;
    }

    public function setDatemise(\DateTimeInterface $datemise): self
    {
        $this->datemise = $datemise;

        return $this;
    }

    public function getStatue(): ?bool
    {
        return $this->statue;
    }

    public function setStatue(bool $statue): self
    {
        $this->statue = $statue;

        return $this;
    }

    public function getNombreplaces(): ?int
    {
        return $this->nombreplaces;
    }

    public function setNombreplaces(int $nombreplaces): self
    {
        $this->nombreplaces = $nombreplaces;

        return $this;
    }

    public function getType(): ?TypeParking
    {
        return $this->type;
    }

    public function setType(?TypeParking $type): self
    {
        $this->type = $type;

        return $this;
    }
    public function getGouvernorat(): ?string
    {
        return $this->gouvernorat;
    }

    public function setGouvernorat(string $gouvernorat): self
    {
        $this->gouvernorat = $gouvernorat;

        return $this;
    }
}

И, наконец, форма с именем ParkingType.php


<?php

namespace App\Form;

use App\Entity\Parking;
use App\Entity\TypeParking;
use App\Entity\Gouvernorat;

use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\Extension\Core\Type\TextType;

use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;

class ParkingType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('libelle')


            ->add('gouvernorat', EntityType::class, [
                // looks for choices from this entity
                'class' => Gouvernorat::class,

                // uses the User.username property as the visible option string
                'choice_label' => 'nom',
                'choice_value' => 'nom',
            ])
            //->add('gouvernorat')

            ->add('delegation')
            ->add('adresse')
            ->add('datemise')
            ->add('statue', ChoiceType::class, [
                'choices'  => [
                    'Activé' => true,
                    'Desactivé' => false,
                ],
            ])
            ->add('nombreplaces')
            ->add('type',EntityType::class, [
                'class' => TypeParking::class,
                'choice_label' => 'libelle',
            ])
        ;
    }

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

Раскрывающийся список заполняется очень хорошо, но всякий раз, когда я пытаюсь отправить форму, я получаю следующую ошибку:


Expected argument of type "string", "App\Entity\Gouvernorat" given at property path "gouvernorat".

1 Ответ

1 голос
/ 02 апреля 2019

Это происходит потому, что тип формы EntityType::class предполагает, что ваше поле сущности будет иметь отношение OneToOne с классом Gouvernorat в вашей сущности Parking, а не string, как вы его определили.

Это должно быть исправление, которое вы ищете:
В App\Entity\Parking

<?php

namespace App\Entity;

use Doctrine\ORM\Mapping as ORM;
use App\Entity\Gouvernorat;

/**
 * @ORM\Entity(repositoryClass="App\Repository\ParkingRepository")
 */
class Parking
{
    // ...

    /**
     * @OneToOne(targetEntity="Gouvernorat")
     */
    private $gouvernorat;

    // ...

    public function getGouvernorat(): ?Gouvernorat
    {
        return $this->gouvernorat;
    }

    public function setGouvernorat(Gouvernorat $gouvernorat): self
    {
        $this->gouvernorat = $gouvernorat;

        return $this;
    }

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