Php 表格->;HandlerRequest在使用子formtype时将数据设置为null
Symfony版本:2.8.6 我正试图根据父字段类型中的选择更新表单字段。但是当我执行Php 表格->;HandlerRequest在使用子formtype时将数据设置为null,php,forms,symfony,Php,Forms,Symfony,Symfony版本:2.8.6 我正试图根据父字段类型中的选择更新表单字段。但是当我执行$form->handleRequest($request)时,所有数据都是空的 我主要尝试遵循以下指南: ArticleType.php public function buildForm(FormBuilderInterface $builder, array $options) { $updateRoute = $this->router->generate('appbundle_a
$form->handleRequest($request)
时,所有数据都是空的
我主要尝试遵循以下指南:
ArticleType.php
public function buildForm(FormBuilderInterface $builder, array $options)
{
$updateRoute = $this->router->generate('appbundle_article_update_form');
$builder
->add('name', 'text', [
'required' => false,
])
->add('description', 'textarea', [
'required' => false,
])
->add('ajax_update_action', 'hidden', [
'data' => $updateRoute,
'mapped' => false,
])
->add('type', ChoiceType::class, [
'choices' => [
'text' => 'Text',
'textarea' => 'Multiline',
'choice' => 'Choice',
],
])
->add('parameters', OptionsType::class)
;
}
OptionsType.php
如果ArticleType中的type
设置为“choice”,则应添加3个额外字段(它们会这样做)
Article/edit.html.twig:
非常简单,我们有一个自定义表单来更新表单(无需持久化!)
Article.php
实体:
/**
* Storing it as json.
*
* @var string
*
* @ORM\Column(type="text", nullable=true)
*/
protected $parameters;
/**
* Set parameters.
*
* @param array $parameters
*
* @return Article
*/
public function setParameters($parameters)
{
$this->parameters = json_encode($parameters);
return $this;
}
/**
* Get parameters.
*
* @return array
*/
public function getParameters()
{
return json_decode($this->parameters, true);
}
所以在handleRequest之后,我的所有字段都被清空了,日志中没有任何异常或通知。这是一个错误,还是我这样做是错误的?不幸的是,使用
FormEvents::PRE\u SET\u DATA
instead无法解决问题。不幸的是,使用FormEvents::PRE\u SET\u DATA
instead无法解决问题。
{{ form(form) }}
<script>
$( document ).ready(function () {
$('select#article_type').on(
'change',
this,
function() {
var $form = $(document).find('form[name=article]'),
$url = $form.find('#article_refresh_action').val(),
$data = $form.serialize();
$.ajax({
url: $url,
type: 'POST',
data: $data,
success: function (html) {
$form.find('#article_parameters').replaceWith($(html).find('#article_parameters'));
}
});
}
);
});
</script>
/**
* @param Request $request
*
* @Route("/article/updateForm", name="appbundle_article_update_form")
* @Method({"PUT", "POST"})
*
* @return Response
*/
public function updateFormAction(Request $request)
{
$form = $this->createForm(
$this->get('appbundle.form.type.article'),
new Article()
);
// When i do a `dump($request->request->all())` here, I'm given all the correct data in an array
$form->handleRequest($request);
// When i do `dump($form->getData());` here, all the fields are null, which makes the form return blank.
return $this->render(
'AppBundle:Article:edit.html.twig', [
'form' => $form->createView(),
]
);
}
/**
* Storing it as json.
*
* @var string
*
* @ORM\Column(type="text", nullable=true)
*/
protected $parameters;
/**
* Set parameters.
*
* @param array $parameters
*
* @return Article
*/
public function setParameters($parameters)
{
$this->parameters = json_encode($parameters);
return $this;
}
/**
* Get parameters.
*
* @return array
*/
public function getParameters()
{
return json_decode($this->parameters, true);
}