在我的Symfony项目中,当我从“员工”中选择一名员工时,下拉列表,我需要从另一个下拉列表中获取默认值,'部门'员工在。
下拉列表,员工和部门都已从数据库中填充。
我在Symfony中有一个表单,我可以手动选择一个员工和一个部门。
如何从员工下拉列表中选择员工的姓名来获得员工的默认部门?
在FormType.php文件中,我有:
class CommMemberType extends AbstractType
/**
* @param FormBuilderInterface $builder
* @param array $options
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('employee','entity', array(
'label' => 'Employee Name',
'empty_value' => ' ',
'class' => 'CompanyBundle:Employee',
'query_builder' => function(EntityRepository $er) {
return $er->createQueryBuilder('e')
->orderBy('e.fname', 'ASC');
},
)
)
->add('dept', 'entity', array(
'label' => 'Department',
'empty_value' => '---Select Department---',
'required' => true,
'class' => 'CompanyBundle:Lookup\Dept',
'property' => 'meaning',
'query_builder' => function(EntityRepository $er) {
return $er->createQueryBuilder('dept')
->orderBy('dept.meaning', 'ASC');
},
));
我也有一个jQuery代码,我只测试了console.log部分:
$(document).ready(function() {
$('body .employee').on('change', function(){
var id = $(this).val();
console.log(id);
$.post('{{ emp_jquery }}', { 'employee': id },function(data){
$('.dept').html(data);
},"text");
})
});
你可以帮我一把吗?非常感谢你!
答案 0 :(得分:0)
您可以将Dept
实体作为参数传递给表单构造函数,然后使用'data':
class CommMemberType extends AbstractType
{
private $dept;
function __construct(Dept $dept = null)
{
$this->dept = $dept
}
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('employee','entity', array(
'label' => 'Employee Name',
'empty_value' => ' ',
'class' => 'CompanyBundle:Employee',
'query_builder' => function(EntityRepository $er) {
return $er->createQueryBuilder('e')
->orderBy('e.fname', 'ASC');
},
)
)
->add('dept', 'entity', array(
'label' => 'Department',
'empty_value' => '---Select Department---',
'required' => true,
'class' => 'CompanyBundle:Lookup\Dept',
'property' => 'meaning',
'data' => $this->dept ? $this->dept->getMeaning() : null, // e.g.
'query_builder' => function(EntityRepository $er) {
return $er->createQueryBuilder('dept')
->orderBy('dept.meaning', 'ASC');
},
));
....
在控制器中,您应该将Department对象作为参数传递给表单: