Предположим, вы находитесь на странице редактирования категории и хотите добавить несколько задач для этой категории.
Некоторые поля одинаковы для каждая задача, например дата (это всего лишь пример, и некоторые поля могут быть одинаковыми).
С другой стороны, у нас есть коллекция полей имени и описания.
Итак, пользователь выбирает дату для набора задач и может нажать кнопку «Добавить элемент» и вставить для них заголовок и описание.
Как вы создаете форму в Form Type и внутри Twig?
Предполагаем, что мы также хотим добавить внутреннюю проверку.

// Category Entity
namespace App\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity()
* @ORM\Table(name="categories")
*/
class Category
{
/**
* @ORM\Id
* @ORM\GeneratedValue
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\Column(type="string", length=255)
*/
private $name;
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;
}
}
// Task Entity
namespace App\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity()
* @ORM\Table(name="tasks")
*/
class Task
{
/**
* @ORM\Id
* @ORM\GeneratedValue
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\Column(type="string", length=255)
*/
private $title;
/**
* @ORM\Column(type="text", nullable=true)
*/
private $description;
/**
* @ORM\Column(type="datetime")
*/
private $date;
/**
* @ORM\ManyToOne(targetEntity=Category::class)
* @ORM\JoinColumn(nullable=false)
*/
private $category;
public function getId(): ?int
{
return $this->id;
}
public function getTitle(): ?string
{
return $this->title;
}
public function setTitle(string $title): self
{
$this->title = $title;
return $this;
}
public function getDescription(): ?string
{
return $this->description;
}
public function setDescription(?string $description): self
{
$this->description = $description;
return $this;
}
public function getDate(): ?\DateTimeInterface
{
return $this->date;
}
public function setDate(\DateTimeInterface $date): self
{
$this->date = $date;
return $this;
}
public function getCategory(): ?Category
{
return $this->category;
}
public function setCategory(?Category $category): self
{
$this->category = $category;
return $this;
}
}
CategoryType in normal situation is like below, but I want to implement the form like the attched photo above.
// Category Type
class CategoryType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('name', TextType::class, [
'label' => 'Category Name',
])
->add('tasks', CollectionType::class, [
'entry_type' => TaskType::class,
'entry_options' => [
'label' => false,
],
'allow_add' => true,
'allow_delete' => true,
'by_reference' => false, // Important to use this for collections
'label' => 'Tasks',
]);
}
// ... existing configureOptions method
}
Подробнее здесь: https://stackoverflow.com/questions/788 ... mfony-form
Мобильная версия