繁体   English   中英

Phalcon \\ Mvc \\ Model序列化 - 对象属性丢失

[英]Phalcon\Mvc\Model serialization - object properties are lost

序列化Phalcon \\ Mvc \\ Model会丢失不属于模式的对象属性。

我有以下模型,在加载时设置状态数组:

class Country extends Phalcon\Mvc\Model
{
    protected $states;

    public function initialize()
    {
        $this->setSource('countries');
    }

    public function afterFetch()
    {
        if ($this->id) {
            $this->states = ['AL', 'AZ', 'NV', 'NY'];
        }
    }
}

我这样做:

    $country = Country::findFirst($countryId);
    $serialized = serialize($country);
    $unserialized = unserialize($serialized);

$ serialized string甚至不包含“states”子字符串。 因此,在未序列化的对象中缺少“状态”。

我在会话中处理用户身份验证和持久性时发现了这一点(涉及序列化/反序列化)。 我的User对象丢失了afterFetch()阶段中加载的所有属性。

两个问题:

  1. 为什么“状态”属性在序列化时消失了?
  2. 在Phalcon世界中持久化模型是不是很糟糕(我认为这是在会话中存储用户对象的便捷方式)?

我在Phalcon 1.3.0上。

谢谢,Temuri

\\ Phalcon \\ Mvc \\ Model实现Serializable接口。

要序列化您自己的属性(\\ Phalcon \\ Mvc \\ Model不知道),您将需要使用这样的技巧: http//ua1.php.net/manual/en/class.serializable.php#107194

public function serialize()
{
    $data = array(
        'states' => $this->states,
        'parent' => parent::serialize(),
    );

    return serialize($data);
}

public function unserialize($str)
{
    $data = unserialize($str);
    parent::unserialize($data['parent']);
    unset($data['parent']);
    foreach ($data as $key => $value) {
        $this->$key = $value;
    }
}

答案是 - Phalcon序列化程序当前忽略所有非Model属性,以使序列化对象变亮。

我已经提交了新的NFR: https//github.com/phalcon/cphalcon/issues/1285

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM