【问题标题】:Dropdown Ajax onchange SonataAdminBundle Symfony2 Issue下拉 Ajax onchange SonataAdminBundle Symfony2 问题
【发布时间】:2014-01-14 22:22:51
【问题描述】:

我正在尝试在 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>";
    }

到目前为止一切正常....

但是当我尝试点击 create.its 时显示错误

我无法找出问题所在。 您的帮助将不胜感激

【问题讨论】:

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


    【解决方案1】:

    答案的第一个元素:

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

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

    我正在寻找绕过此控制的方法..

    【讨论】:

    • 我做了一个 hack,它可以工作,但它根本不是干净的代码。如果您使用 for 使用从 0 到 X 值的索引填充选择值(在 configureFormField 中),它会起作用。没有人得到有效的解决方案?
    【解决方案2】:

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

    当您提交表单时,管理员类会检查您提交的值是否与您的管理员类的值之一匹配。这样做是出于安全考虑,因此您无法提交未指定的值。

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 2018-02-06
        • 1970-01-01
        • 1970-01-01
        • 2018-11-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多