Я пытаюсь разработать свое первое symfony веб-приложение и решил использовать пакет EasyAdmin.
В этом веб-приложении я хотел бы определить следующую модель: Event
с несколькими датами.
Чтобы создать это, я создал 2 сущности с помощью консоли symfony: Event
и EventDate
:
<?php
namespace App\Entity;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity(repositoryClass="App\Repository\EventRepository")
*/
class Event
{
/**
* @ORM\Id()
* @ORM\GeneratedValue()
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\Column(type="string", length=255)
*/
private $name;
/**
* @ORM\OneToMany(targetEntity="App\Entity\EventDate", mappedBy="event", orphanRemoval=true)
*/
private $dates;
public function __construct()
{
$this->dates = new ArrayCollection();
}
public function getId(): ?int
{
return $this->id;
}
public function getName(): ?string
{
return $this->name;
}
public function setName(string $name): self
{
$this->name = $name;
return $this;
}
/**
* @return Collection|EventDate[]
*/
public function getDates(): Collection
{
return $this->dates;
}
public function addDate(EventDate $date): self
{
if (!$this->dates->contains($date)) {
$this->dates[] = $date;
$date->setEvent($this);
}
return $this;
}
public function removeDate(EventDate $date): self
{
if ($this->dates->contains($date)) {
$this->dates->removeElement($date);
// set the owning side to null (unless already changed)
if ($date->getEvent() === $this) {
$date->setEvent(null);
}
}
return $this;
}
public function __toString(): String
{
return $this->name;
}
}
<?php
namespace App\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity(repositoryClass="App\Repository\EventDateRepository")
*/
class EventDate
{
/**
* @ORM\Id()
* @ORM\GeneratedValue()
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\Column(type="date")
*/
private $date;
/**
* @ORM\ManyToOne(targetEntity="App\Entity\Event", inversedBy="dates")
* @ORM\JoinColumn(nullable=false)
*/
private $event;
public function getId(): ?int
{
return $this->id;
}
public function getDate(): ?\DateTimeInterface
{
return $this->date;
}
public function setDate(\DateTimeInterface $date): self
{
$this->date = $date;
return $this;
}
public function getEvent(): ?Event
{
return $this->event;
}
public function setEvent(?Event $event): self
{
$this->event = $event;
return $this;
}
}
Чтобы быть удобным для пользователя, я хотел бы «настроить» форму Event
, чтобы позволить пользователю создавать в той же форме событие и его даты.
Для для этого я должен определить форму сущности Event
следующим образом:
easy_admin:
entities:
Event:
class: App\Entity\Event
form:
fields:
- {property: 'name'}
- {property: 'dates', type: 'collection'}
Визуализация коллекции правильная, поскольку я могу добавить или удалить дату:
![enter image description here](https://i.stack.imgur.com/Pr7Ir.png)
Но, как вы можете видеть, поле, представляющее EventDate
, является редактируемым текстом. Я думаю, это потому, что поле представляет класс EventDate
, а не только атрибут date
.
Цель состоит в том, чтобы иметь селектор даты, который у меня есть, если я добавлю новый EventDate
в EasyAdmin:
![enter image description here](https://i.stack.imgur.com/4YQSF.png)
Так что вопрос: Как настроить EasyAdmin для добавления Event
и его дат в единой форме?
Спасибо за вашу помощь!