如何根据另一个列表中的选定值从下拉列表中选择默认值

时间:2015-05-20 18:09:06

标签: php jquery ajax symfony

在我的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");
})
});
你可以帮我一把吗?非常感谢你!

1 个答案:

答案 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对象作为参数传递给表单: