私は3つのエンティティ(国、地域、都市)を持っています
namespace ****\****Bundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
class Country
{
private $id;
private $name;
/**
* @var integer $regions
*
* @ORM\OneToMany(targetEntity="Region", mappedBy="Country")
*/
protected $regions;
//...
}
class Region
{
private $id;
private $name;
/**
* @var integer $country
*
* @Assert\Type(type="****\***Bundle\Entity\Country")
* @ORM\ManyToOne(targetEntity="Country", inversedBy="regions")
* @ORM\JoinColumn(name="country_id", referencedColumnName="id", nullable=false)
*/
private $country;
/**
* @ORM\OneToMany(targetEntity="City", mappedBy="Region")
*/
protected $cities;
}
class City
{
private $id;
private $name;
/**
* @var integer $region
*
* @Assert\Type(type="****\****Bundle\Entity\Region")
* @ORM\ManyToOne(targetEntity="Region", inversedBy="cities")
* @ORM\JoinColumn(name="region_id", referencedColumnName="id", nullable=false)
*/
private $region;
/**
* @ORM\OneToMany(targetEntity="Company", mappedBy="City")
*/
protected $companys;
//...
}
市のフォームクラスは次のとおりです。
namespace ****\****Bundle\Form;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
class CityType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('name')
->add('region');
}
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'data_class' => '****\****Bundle\Entity\City',
));
}
public function getName()
{
return 'city';
}
}
これにより、名前の textBox とすべての領域が使用可能な SelectBox を持つ基本的な HTML5 フォームが作成されます。
私の質問は、最初の SelectBox を追加して、2 番目の SelectBox をフィルター処理し、地域の選択肢の数を減らすために国を選択できるようにする最善の方法は何ですか?
イベントリスナー? イベント ディスパッチャー コンポーネント ?