PHP:如何防止序列化命中某个成员

标签 php symfony silex

我有一个 User 对象,其 protected 成员指向一个 PDO 对象。

我正在使用 Silex/Symfony,当我尝试登录时 Symfony\Component\Security\Core\Authentication\Token\AbstractToken 去序列化那个对象并给出一个异常,因为 PDO 对象不能'不被连载。

我尝试将成员设为私有(private),但这没有帮助。如果我取消设置 __sleep 中的属性,我不确定如何将它放回 __wakeup 中,因为该成员是通过在构造函数中传递来设置的。

我见过的示例通过静态查找取回不可序列化的内容,但我正在努力避免这种情况。有什么想法吗?

最佳答案

听起来你的模型对象中有持久化逻辑,这是你问题的真正根源;您可能想看看存储库设计模式来解决这个问题。

与此同时,重新填充 PDO 对象的唯一真正选择是使用邪恶的全局变量;你的 __wakeup() 必须伸出手去捕获一个实例。

我想您也可以覆盖加载用户的服务,并将其替换为在反序列化后立即注入(inject)数据库的服务,但这似乎有点麻烦——最好只是从模型中提取持久性代码并只序列化模型。

关于PHP:如何防止序列化命中某个成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30471341/

相关文章:

php - 如何为企业名称创建mysql查询?

php - 创建 PHP 页眉/页脚

javascript - 如何使用google map api在php中获取当前的经纬度?

php - 计算php中具有相同ID的行数

php - Symfony 身份验证提供程序

php - SFTP 上的文件在开头显示附加字符

entity-framework - 不是有效的实体或映射的父类(super class)

php - 由于 "session_start",从 PHP 5.3 切换到 Php 5.4 时 Silex 出现白屏死机

routes - 如何在 Silex 中创建通配符路由 (/something/*)?

php - 使用 Symfony Forms/Silex & Twig 时出错