【问题标题】:Phalcon v.1.3. Model's onConstruct does not fire after unserializePhalcon v.1.3。模型的 onConstruct 在反序列化后不会触发
【发布时间】:2015-06-13 14:33:25
【问题描述】:

Phalcon 1.3 MVC 模型文档说:

The initialize() method is only called once during the request, it’s intended to perform initializations that apply for all instances of the model created within the application. If you want to perform initialization tasks for every instance created you can ‘onConstruct’

我有一个模型类,它被序列化并实现了 onConstruct():

class Book extends \Phalcon\MVC\Model
{
     protected $a;
     protected $b;

     function onConstruct() {
          $this->a = 1;
     }

     function initialize() {
          $this->b = 2;
     }
}

Book 的多个实例存储在 memcached 中,然后在同一个请求中单独加载。

问题是从 memcached 读取(即反序列化)BookonConstruct 永远不会被调用。

我还注意到,当连续反序列化多个 Book 时,它的 initialize() 仅在第一个实例中被调用(根据文档,这是正确的)。但是,当 Book #2 从 memcached 加载时,它的 $b 属性为空(预计为 2,正如文档所说:“适用于模型的所有实例”)。

问题:

  1. 为什么onConstruct() 根本不触发?
  2. 为什么 Book 的第二个实例没有将 $b 分配给 2?

谢谢!

【问题讨论】:

    标签: php phalcon


    【解决方案1】:

    我可能猜想序列化/非序列化模型被认为已经初始化,所以如果你需要一些额外的技巧,你必须在反序列化之后进行,例如。在unserialize 方法期间。

    无论如何,按照上面的逻辑,我会考虑报告一个错误。如果 initialize 方法被调用一次,它应该被调用每个对象反序列化或根本不调用,以使事情保持一致。

    我可以通过工作示例对此进行测试。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-02-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-25
      • 2019-02-24
      • 1970-01-01
      • 2014-05-08
      相关资源
      最近更新 更多