0

首先,我有一个向我的控制器提交一些字符串的表单。该控制器首先访问数据库中的相应实体,然后尝试为该实体更新这些字符串。

我检索参数如下:

$message = $request->request->get('message');

出于测试目的,我输入了这一行:

echo '<script>alert("the message is: ' . $message . '");</script>';

它会提醒预期的消息-> 所以我继续假设 $message 变量实际上正确地“使它”到了我的控制器。

接下来,我更新实体信息:

$entity->setMessage($message);

这会导致数据库中出现空值。没有错误,没有崩溃的服务器,$message只是永远达不到它的命运。
我的下一个假设是实体函数 setMessage 可能有问题,因此我在每种可能的组合中尽可能使用(字符串)强制转换。

接下来,我把一个var_dump无处不在,再次所有可能的组合。甚至发出实体属性消息"string(x)" xxxx

所以我想“好吧,它被正确分配了”

到目前为止,我假设我可能忘记了

$em->persist($entity);

$em->flush();

但即便如此,我似乎也记得把它放进去。

所以我想到了一个新的测试。我创建了一个名为 $test 的新变量,为它分配了一些随机字符串,并用它调用了 setMessage,自然假设这不可能工作。它做了。它顺利地坚持了下来。

总结一下:我得到了正确的实体,字符串被加载并且实际上正确地存在于控制器中,实体方法完美地工作,实体管理器以我想要的方式持续存在并刷新。

这里有什么问题?$test我的字符串和$message我可以确定的字符串之间的唯一区别是$message来自请求。看来这就是我对此事的了解有限的地方。

4

1 回答 1

0

我找到了问题的解决方案。实际上,我似乎是一个普遍的问题解决者。关闭电脑,回家,第二天回来,它工作。

鉴于这种情况,我认为必须存在某种浏览器/symfony 缓存问题/bug/error-on-my-behalf 存储了控制器先前执行的 $message 并且未能正确清除它。即使 $message 字符串总是正确地到达控制器,它也永远不会被持久化。因此(如果是缓存问题)$message 在从控制器到实体方法/实体本身的途中被缓存在某处,或者实体管理器本身具有实体的缓存版本并在使用 $message 时使用它.

这就是我想出的解释。如果有人有根据的猜测或实际上知道发生了什么,请告诉我。

于 2013-09-26T09:50:30.060 回答