首先,我有一个向控制器提交一些字符串的表单。该控制器首先访问数据库中的相应实体,然后尝试更新该实体的字符串。
我按如下方式检索参数:
$message = $request->request->get('message');
出于测试目的,我把这行:
echo '<script>alert("the message is: ' . $message . '");</script>';
它提醒预期的消息 - &gt;所以我继续并假设$ message变量实际上“正确地”使我的控制器“。”
接下来,我更新实体信息:
$entity->setMessage($message);
这会导致数据库中出现空值。没有错误,没有崩溃的服务器,$message
永远不会达到它的命运
我的下一个假设是实体函数setMessage可能有问题,因此我尽可能在每种可能的组合中使用(字符串)转换。
接下来,我将var_dump
放在任何地方,所有组合都可能。甚至实体属性消息也发布了"string(x)" xxxx
所以我认为“好吧它被正确分配”
到目前为止,我认为我可能已经忘了
$em->persist($entity);
$em->flush();
但即便如此,我似乎还记得要投入。
所以我想到了一个新的测试。我创建了一个名为$ test的新变量,为它分配了一些随机字符串并使用这个变量调用了setMessage,自然而然地假设这不可行。它做了。它得以顺利进行。
总结一下:我得到了正确的实体,字符串被加载并且在控制器中实际存在,实体方法完美地工作,实体管理器持续存在并按照我想要的方式刷新。
这里有什么问题?我可以确定的$test
字符串和$message
字符串之间的唯一区别是$message
来自请求。似乎我对此事的了解有限。
答案 0 :(得分:0)
我找到了问题的解决方案。我实际上似乎是一个普遍的问题解决者。关闭电脑,回家,第二天回来,它有效。
鉴于这种情况,我认为必须存在某种类型的浏览器/ symfony缓存问题/错误/错误代表我从前一次执行控制器存储的$ message并且无法正确清除它。即使$ message字符串总是正确地到达控制器,它也永远不会被持久化。所以要么(如果它是一个缓存问题)$ message在从控制器到实体方法/实体本身的某个地方被缓存,或者实体管理器本身有一个实体的缓存版本并在使用$ message时使用它
这就是我提出的解释。如果某人有一个有根据的猜测或实际知道发生了什么,请告诉我。