2013-09-24 30 views
3

序列化Phalcon \ Mvc \ Model失去了不属于模式一部分的对象属性。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); 

$序列串甚至不含有 “国家” 串。因此,“无序”对象中缺少“国家”。

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

两个问题:

  1. 为什么 “状态” 属性消失在序列化?
  2. 在Phalcon世界里坚持模型(我认为这是一种在会话中存储用户对象的方便方式)是否是一种不好的做法?

我在Phalcon 1.3.0上。

感谢, Temuri

回答

4

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

要序列您自己的属性(\尔康\的mvc \型号是不知道的),你将需要使用一个技巧是这样的: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; 
    } 
} 
+0

Github的用户alanbarber111发布了一个有趣的片段:github上。 COM /尔康/ cphalcon /问题/ 1285 – temuri