[英]Symfony2 form populating entitiy based on other entity
我正在使用Symfony2表单组件来创建和修改表单。 我目前正在加载所有模型实体作为选择,但是我只需要从制造商那里获取与所选(发布)值相关的模型。
我该如何实现?
class VehicleType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('manufacturer', 'entity', array(
'label' => 'Brand',
'attr' => array('class' => 'input-block-level'),
'class' => 'BalslevCarBundle:Manufacturers',
'property' => 'short_name',
'empty_value' => 'All',
'required' => false
));
$builder->add('model', 'entity', array(
'label' => 'Model',
'class' => 'BalslevCarBundle:Models',
'property' => 'model',
'empty_value' => 'All',
'required' => false
));
}
public function getName()
{
return 'search';
}
}
首先,您必须根据用户选择“动态”创建选择。
严格地与您的应用程序行为结合的两种方法(在两种情况下)都导致使用相同的“核心”代码。 区别只是您称呼它的方式。
因此,让我们解释两种可能性:
所以,你的问题的核心是:我怎么能只检索相关的实体?
进入您的VehicleType.php(在这种情况下,其中的实体是VehicleType吗?)
private $manufacturerId;
public function __construct($manufacturerId)
{
$this->manufacturerId = $manufacturerId;
}
public function BuildForm(FormBuilderInterface $builder)
{
$manufacturerId = $this->manufacturerId;
$manufacturerQuery = function(EntityRepository $repo) use ($manufacturerId ){
return $repo->createQueryBuilder('m')
->where('m.id = :id')
->setParameter('id',$manufacturerId );};
$builder->add('manufacturer', 'entity', array(
'label' => 'Brand',
'attr' => array('class' => 'input-block-level'),
'class' => 'BalslevCarBundle:Manufacturers',
'property' => 'short_name',
'empty_value' => 'All',
'required' => false,
'query_builder' => $manufacturerQuery;
));
$builder->add('model', 'entity', array(
'label' => 'Brand',
'attr' => array('class' => 'input-block-level'),
'class' => 'BalslevCarBundle:Manufacturers',
'property' => 'short_name',
'empty_value' => 'All',
'required' => false,
'query_builder' => $modelQuery;
));
}
如您所见,通过这种方式,我们使用自定义存储库来仅获取适合我们需求的实体。 显然,我在编写DQL查询时并不知道您的数据库结构:将其适应实际情况是您的任务和责任。
此外,您还必须为模型创建另一个查询(在我的答案中称为$modelQuery
),以根据所选的$id
检索正确的模型。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.