下载Ajax onchange SonataAdminBundle Symfony2问题

时间:2013-12-27 10:12:13

标签: php symfony sonata-admin symfony-2.3 symfony-sonata

我正在尝试在SonataAdminBundle中实现onchange下拉列表。我的实体就像

 class BuilderHomePage
{
/**
 * @var integer
 *
 * @ORM\Column(name="id", type="integer", nullable=false)
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="IDENTITY")
 */
private $id;

 /**
 * @var \Hello\FrontendBundle\Entity\MtContentType
 *
 * @ORM\ManyToOne(targetEntity="Hello\FrontendBundle\Entity\MtContentType")
 * @ORM\JoinColumns({
 *   @ORM\JoinColumn(name="content_type_id", referencedColumnName="id")
 * })
 */
private $section;


/**
 * @var string
 *
 * @ORM\Column(name="title", type="string",length=100, nullable=false)
 */
private $title;

我的管理员课程

     public function getTemplate($name)
     {
       switch ($name) {
        case 'edit':
            if ($this->getSubject()->getId()) {
                return 'HelloAdminBundle:Builder:base_edit.html.twig';
            } else {
                return 'HelloAdminBundle:Builder:base_edit.html.twig';
            }
            break;
        default:
            return parent::getTemplate($name);
            break;
    }

}

protected function configureRoutes(RouteCollection $collection) {
$collection
    ->add('getArticleFromSection', 'getArticleFromSection')
    ;
}
protected function configureFormFields(FormMapper $formMapper)
{
    $formMapper

        ->add('section')
        ->add('title','choice',array('required' => false ))

    ;
}

我的构建器:base_edit.html.twig

     <script type="text/javascript">
     $(document).ready(function()
       {
         $("#{{ admin.uniqId }}_section").change(function()
        {
        var id=$(this).val();
        var dataString = 'id='+ id;
        $.ajax
        ({
            type: "POST",
            url: "{{ admin.generateObjectUrl('getArticleFromSection', object) }}",
            data: dataString,
            cache: false,
            success: function(html)
            {
                $("#{{ admin.uniqId }}_title").html(html);
            } 
        });
       });

     });

</script>

Ajax请求控制器

    $article        = $this->get('hello_frontend.article');
    $totalArticle        = $article->getArticleByContentType($id);

     $html = "";
    foreach($totalArticle as $res){
    $html .="<option value=".$res->getId().">".$res->getTitle()."</option>";
    }

直到现在一切正常.... enter image description here

但是当我试图点击显示错误的create.its时 enter image description here

我无法弄清楚问题所在。 我们将非常感谢您的帮助

3 个答案:

答案 0 :(得分:0)

答案的第一个要素:

经过多次测试后,似乎提交的“授权”选项值与entityAdminClass相关。

只有当其值与configureFormFields中字段声明中的选择数组中定义的值匹配时,才能添加所需的所有选项。

我正在寻找一种绕过这种控制的方法..

答案 1 :(得分:0)

这是因为您没有在管理类中指定任何选项。

当您提交表单时,管理类会检查您提交的值是否与管理类的某个值匹配。这样做是为了安全,因此您无法提交未指定的值。

答案 2 :(得分:0)

Noscope,这正是他想要做的。他希望动态填充第二个选择,因此他无法在管理类中填充它。

我有同样的问题,我找不到如何解决它。我现在找到的唯一方法是在我的操作中检查$this->container->get('request')->request->get('YourFormName[your_field]', null, true)