Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 表格->;HandlerRequest在使用子formtype时将数据设置为null_Php_Forms_Symfony - Fatal编程技术网

Php 表格->;HandlerRequest在使用子formtype时将数据设置为null

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

Symfony版本:2.8.6

我正试图根据父字段类型中的选择更新表单字段。但是当我执行
$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);
}