Symfony 2.7.6 全局扩展和弃用警告:app.user 无法与其他用户进行比较
Symfony 2.7.6 global extensions & deprecated warnings : app.user can't be compared with other users
晚上好,
我最近升级到 symfony 2.7.6。除了它帮助我设置 HWIOAuthBundle 之外,我注意到之前运行良好的模板中的一个错误。
以下测试永远无效,尽管我是此活动的创建者!
{% if event.getCreator() == app.user %}
创作者看起来像这样:
class Event implements EventInterface
{
/**
* @ORM\ManyToOne(targetEntity="FS\UserBundle\Entity\User", cascade={"persist"}, fetch="EAGER")
*
* @ORM\JoinColumn(referencedColumnName="id", nullable=false, onDelete="CASCADE")
*/
private $creator;
public function getCreator()
{
return $this->creator;
}
...
我开始在分析器中搜索并发现 Twig_ExtensionInterface::getGlobals() 和 Twig_ExtensionInterface::initRuntime() 在 Symfony 2.7.6 中被弃用(在我的应用程序中)。
然后我从 Twig 开发者 Remi Collet 那里读到 post,说这 2 个已弃用的调用会使 Twig 测试失败,并为 twig (v1.23) 上传了一个简单的补丁,但这个补丁没有'帮不上忙
我用的是老版本的twig/twig,它帮我解决了deprecated method warning。但是app.user测试还是坏了...
有人知道为什么我的全局扩展 app.user 无法与 twig 中的其他用户进行比较吗?
它与弃用警告无关。它们的存在只是为了通知您,您的代码可能不适用于 未来的 版本,但在当前版本中一切都很好。
问题是您可以有多个包含同一用户数据的用户对象。如果你只使用 Doctrine,它会在你每次请求时为用户提供相同的对象。这就是为什么您有时可以比较对象。
但是会话管理(提供app.user
)可能不一定依赖于 Doctrine。出于性能目的,它可能会以其他方式存储对象,例如在会话本身中。
所以现在你有两个 同一用户的用户对象:一个来自会话管理,一个来自 Doctrine (event.getCreator()
)。如果你比较这两个对象,PHP 当然会发现它们是两个不同的对象(即使它们包含相同的数据)并且return false
在那个比较中。
一种解决方案可能是检查用户对象中的标量值,例如 app.user.getId() == event.getCreator().getId()
或类似的东西。这样你就可以比较 values 而不是 instances.
晚上好,
我最近升级到 symfony 2.7.6。除了它帮助我设置 HWIOAuthBundle 之外,我注意到之前运行良好的模板中的一个错误。
以下测试永远无效,尽管我是此活动的创建者!
{% if event.getCreator() == app.user %}
创作者看起来像这样:
class Event implements EventInterface
{
/**
* @ORM\ManyToOne(targetEntity="FS\UserBundle\Entity\User", cascade={"persist"}, fetch="EAGER")
*
* @ORM\JoinColumn(referencedColumnName="id", nullable=false, onDelete="CASCADE")
*/
private $creator;
public function getCreator()
{
return $this->creator;
}
...
我开始在分析器中搜索并发现 Twig_ExtensionInterface::getGlobals() 和 Twig_ExtensionInterface::initRuntime() 在 Symfony 2.7.6 中被弃用(在我的应用程序中)。
然后我从 Twig 开发者 Remi Collet 那里读到 post,说这 2 个已弃用的调用会使 Twig 测试失败,并为 twig (v1.23) 上传了一个简单的补丁,但这个补丁没有'帮不上忙
我用的是老版本的twig/twig,它帮我解决了deprecated method warning。但是app.user测试还是坏了...
有人知道为什么我的全局扩展 app.user 无法与 twig 中的其他用户进行比较吗?
它与弃用警告无关。它们的存在只是为了通知您,您的代码可能不适用于 未来的 版本,但在当前版本中一切都很好。
问题是您可以有多个包含同一用户数据的用户对象。如果你只使用 Doctrine,它会在你每次请求时为用户提供相同的对象。这就是为什么您有时可以比较对象。
但是会话管理(提供app.user
)可能不一定依赖于 Doctrine。出于性能目的,它可能会以其他方式存储对象,例如在会话本身中。
所以现在你有两个 同一用户的用户对象:一个来自会话管理,一个来自 Doctrine (event.getCreator()
)。如果你比较这两个对象,PHP 当然会发现它们是两个不同的对象(即使它们包含相同的数据)并且return false
在那个比较中。
一种解决方案可能是检查用户对象中的标量值,例如 app.user.getId() == event.getCreator().getId()
或类似的东西。这样你就可以比较 values 而不是 instances.