Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/230.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.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 Symfony 2.8至3.4:实体ID的简单数组未保存_Php_Symfony_Symfony Forms - Fatal编程技术网

Php Symfony 2.8至3.4:实体ID的简单数组未保存

Php Symfony 2.8至3.4:实体ID的简单数组未保存,php,symfony,symfony-forms,Php,Symfony,Symfony Forms,我正在将一个应用程序从Symfony 2.8更新到3.4 我曾经存储发送AJAX请求的实体集合(不使用Twig的form_xxx helpers) 这是典型的有效载荷: my_healthbundle_anamnesistype[habits][]: 5 my_healthbundle_anamnesistype[diseases][]: 9 my_healthbundle_anamnesistype[diseases][]: 10 它们在AnamnesType表单生成器上没有特殊处理,没有C

我正在将一个应用程序从Symfony 2.8更新到3.4

我曾经存储发送AJAX请求的实体集合(不使用Twig的form_xxx helpers)

这是典型的有效载荷:

my_healthbundle_anamnesistype[habits][]: 5
my_healthbundle_anamnesistype[diseases][]: 9
my_healthbundle_anamnesistype[diseases][]: 10
它们在AnamnesType表单生成器上没有特殊处理,没有ChoiceType或EntityType,只是:

$builder->add('habits')
        ->add('allergies')
        ->add('interventions')
        ->add('diseases')
所有这些实体都非常简单,只有一个ID和一个名称字段

其中每一项都映射到一个记忆实体中,如下所示:

/**
* @ORM\ManyToMany(targetEntity="Habits")
*/
protected $habits;
控制器代码为:

$editForm = $this->createForm(new AnamnesisType(), $entity);
$request = $this->getRequest();
$editForm->bind($request);
if ($editForm->isValid()) {
   /// WIN! 
所有这些在2.8中都起到了很好的作用。正如你所看到的,这是非常简单和直接的。表单生成器没有引用任何实体类、选项类型、实体类型,什么都没有。通过发送所提到的有效负载并调用bind()替换了“记忆”中的所有“习惯”

更新不推荐的内容并遵循所有建议后(
getRequest()
成为对
request\u堆栈的调用,
bind()
成为
handleRequest()
),创建表单从“
newanamnesistype
”更改为“
AnamnesisType::class
”,等等),
isValid()
方法返回false,调用
$editForm->getErrors(true,false)时得到一个空字符串。


我在这里漏了一步吗?当实体更改时,请求中的集合是否保存到表单中?非常感谢您的帮助,这是最后一个升级到3.4然后再升级到4.0的阻止程序。

看起来您缺少if条件中的
$editForm->isSubmitted()
调用。我希望您的更新代码如下所示:

$editForm = $this->createForm(new AnamnesisType(), $entity);
$request = $this->getRequest();

$editForm->handleRequest($request);
if ($editForm->isSubmitted() && $editForm->isValid()) {
    ...
}

不建议在没有isSubmitted的情况下调用isValid,但它仍然适用于Symfony<4.0Thanks!注意,但我使用的是3.4和
$editForm->isValid()
false
,因此即使使用
isSubmitted
,它也永远不会进入if条件。我刚刚尝试从
handleRequest($request)
切换到
submit($request)
,通过使用
submit
我至少收到一条错误消息:“错误:此值无效”。但我仍然不知道“错误”是什么。你使用WebProfiler工具栏吗?如果是,您可以查看验证失败的原因,例如转到
http://localhost:8000/_profiler
(如果使用内部Web服务器默认设置),则转到验证选项卡。日志中有任何消息吗?将代码放在现在这样会更清楚。最重要的是要知道问题来自何处,以及它在更新的代码中。