我正在尝试在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时
我无法弄清楚问题所在。 我们将非常感谢您的帮助
答案 0 :(得分:0)
答案的第一个要素:
经过多次测试后,似乎提交的“授权”选项值与entityAdminClass相关。
只有当其值与configureFormFields中字段声明中的选择数组中定义的值匹配时,才能添加所需的所有选项。
我正在寻找一种绕过这种控制的方法..
答案 1 :(得分:0)
这是因为您没有在管理类中指定任何选项。
当您提交表单时,管理类会检查您提交的值是否与管理类的某个值匹配。这样做是为了安全,因此您无法提交未指定的值。
答案 2 :(得分:0)
我有同样的问题,我找不到如何解决它。我现在找到的唯一方法是在我的操作中检查$this->container->get('request')->request->get('YourFormName[your_field]', null, true)
。