在SonataAdminBundle表单中使用Ajax

时间:2015-06-25 07:58:44

标签: php ajax symfony sonata-admin

我在SonataAdminBundle中使用了Ajax来填充“zipcode”字段中的选择字段“city”。 用户将首先在相关字段中输入zipcode的值,然后ajax将在选择字段中刷新与此zipcode相关的所有城市。

此过程对我有用,但是当我提交时,城市字段始终会收到验证错误“此值无效

这是我的实体:

    /**
 * @ORM\ManyToOne(targetEntity="Insee")
 * @ORM\JoinColumn(name="adresse_ville_id", referencedColumnName="id")
 **/
private $adresseVille;

/**
 * @var string
 *
 * @ORM\Column(name="adresse_code_postal", type="string", length=255)
 * @Gedmo\Translatable
 */
private $adresseCodePostal;

这是我的管理类:

 /**
 * @param \Sonata\AdminBundle\Form\FormMapper $formMapper
 *
 * @return void
 */
protected function configureFormFields(FormMapper $formMapper)
{
    //.....
    $formMapper
        ->add('adresseCodePostal')
        ->add(
            'adresseVille',
            'entity',
            array(
                'class' => 'SimuleoAdminBundle:Insee',
                'choices' => array(),
                'property' => 'commune',
                'empty_value' => 'Ville'
            )
        )
    //.....

这是javascript代码:

$("#{{ admin.uniqId }}_adresseCodePostal").blur(function () {
                var zipCode = $("#{{ admin.uniqId }}_adresseCodePostal").val();
                $.ajax({
                    url: "http://simuleo-dev.local/app_dev.php/api/villes/" + zipCode,
                    async: false,
                    dataType: "json",
                    success: function (result) {
                        console.log(result);

                        var i= 0;
                        var html = "";

                        if (result == "Empty") {
                            $("#{{ admin.uniqId }}_adresseCodePostal").css("border-color", "#ff0000");
                            $("#{{ admin.uniqId }}_adresseCodePostal").val("No city !!");
                        }
                        else {
                            $("#{{ admin.uniqId }}_adresseCodePostal").css("border-color", "#aaaaaa");
                            for (i=0;i<result.length;i++){
                                html += '<option value="' + result[i].id + '">' + result[i].commune + '</option>';
                            }
                        }
                        $("#{{ admin.uniqId }}_adresseVille").empty();
                        $("#{{ admin.uniqId }}_adresseVille").append(html);
                    }
                });
            });

你知道如何解决它吗?

提前谢谢。

0 个答案:

没有答案