Я настраиваю новую форму с 2 полями, Площадь и город.
и хочу настроить, когда выбрана Область, выдаст список поддерживаемых городов для идентификатора области.
IСконфигурируйте ManyToOne для разных городов
My Form Builder:
public function buildForm(FormBuilderInterface $builder, array $options): void
{
$builder
->add('area', EntityType::class, [
'class' => 'App:Area',
'choice_label' => 'getName',
])
$builder->get('area')->addEventListener(
FormEvents::POST_SUBMIT,
function (FormEvent $event) {
$form = $event->getForm();
$form->add('city', EntityType::class, [
'class' => 'App\Entity\City',
'choices' => $form->getData()->getCity()
]);
}
);
$builder->addEventListener(
FormEvents::POST_SET_DATA,
function (FormEvent $event) {
$form = $event->getForm();
$data = $event->getData();
$city = $data->getCity();
if ($city) {
$form->get('area')->setData($city->getCity);
$form->add('city', EntityType::class, [
'class' => 'App\Entity\City',
'choices' => $city->getArea->getCity()
]);
} else {
$form->add('city', EntityType::class, [
'class' => '\App\Entity\City',
'choices' => $city->getArea->getCity()
]);
}
}
);
}
Городской объект:
<?php
namespace App\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity
*/
class City
{
/**
* @ORM\Id()
* @ORM\GeneratedValue()
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\Column(type="string", length=50)
*/
private $name;
/**
* @ORM\ManyToOne(targetEntity="App\Entity\Area")
*/
private $area;
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;
}
public function getArea(): ?Area
{
return $this->area;
}
public function setArea(?Area $area): self
{
$this->area = $area;
return $this;
}
}
Площадь объекта:
<?php
namespace App\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity
*/
class Area
{
/**
* @ORM\Id()
* @ORM\GeneratedValue()
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\Column(type="string", length=100)
*/
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;
}
}
Я ожидаю, когда я изменюArea это даст мне только город area.
После большого количества попыток.
теперь у меня ошибка:
Вызов функции-члена getCity () onnull
Я также пытаюсь добавить в FormBuilder
->add('city', EntityType::class, [
'class' => 'App:City',
'choice_label' => 'getName',
])