Многозначное отношение Symfony 4 позволяет добавлять в конструктор форм - PullRequest
0 голосов
/ 04 июля 2019

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

CustomerEntity:

class Customer implements \JsonSerializable
{
    /**
     * @var int
     *
     * @ORM\Id
     * @ORM\GeneratedValue
     * @ORM\Column(type="integer")
     */
    private $id;

    /**
     * @var string
     *
     * * @ORM\Column(type="string", length=180, unique=true)
     */
    private $name;

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

    public function setName(string $name): void
    {
        $this->name = $name;
    }

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

    /**
     * {@inheritdoc}
     */
    public function jsonSerialize(): string
    {
        return $this->name;
    }

    public function __toString(): string
    {
        return $this->name;
    }
}

SubscriptionEntity:

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

    /**
     * @ORM\ManyToOne(targetEntity="App\Entity\Customer")
     * @ORM\JoinColumn(nullable=false)
     */
    private $customerName;  

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

    /**
     * @return CustomerName
     */
    public function getCustomerName()
    {
        return $this->customerName;
    }

    public function setCustomerName($customerName): self
    {
        $this->customerName = $customerName;

        return $this;
    }

    public function __toString()
    {
        return $this->customerName;
    }
}

SubscriptionType (форма):

class SubscriptionType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
         ->add('customerName', null, array(
             'required' => true,
         ));

    }

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

Так что в настоящее время я могу создать подписку для существующего клиента, я хотел бы знать, как я могу создать подписку для несуществующего клиента?

1 Ответ

0 голосов
/ 04 июля 2019

Ссылка на этот официальный документ для полной реализации: https://symfony.com/doc/current/reference/forms/types/collection.html Вы должны использовать CollectionType, чтобы содержать коллекцию клиента в вашем случае.Затем в своей ветке напишите несколько jquery для динамического добавления нового клиента.Что-то вроде:

class SubscriptionType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
         ->add('customers', CollectionType::class, array(
             'entry_type' => CustomerType::class,
             'entry_options' => [
                'allow_add' => true,
                'prototype' => true
             ]
         ));

    }

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults([
            'data_class' => TicketSubscription::class,
            'customerName' => null
        ]);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...