调试实体时如何显示脏值

时间:2015-05-08 13:31:15

标签: php cakephp-3.0

我需要使用_get所以我只是在User entity进行了测试:

protected function _getName($name)
{
    return $name . ' - FOOBAR';
}

所以在视图中我做了Debug($user),并且结果是:

'properties' => [
        'id' => (int) 32,
        'name' => 'Daniel Pedro', //<- Clean Value
        'email' => 'daniel@gmail.com',
    ],
    'dirty' => [],
    'original' => [],
    'virtual' => [],
    'errors' => [],

您可以注意到属性name的原始值为Daniel Pedro,所以我认为我在_getName做错了但是当我在表单中查看输入时,值是Daniel Pedro - FOOBAR

我的问题是,如何在Debug中显示变异值?

1 个答案:

答案 0 :(得分:1)

单独调试值

使用可能的muatated值检查属性的最简单方法是提取可见属性,例如

debug($entity->extract($entity->visibleProperties()));

这不包括已在$_hidden属性中定义为“隐藏”的属性,如果您也需要它们,那么您必须明确包含它们

debug($entity->extract(array_merge($entity->visibleProperties(), $entity->hidden())));

扩展调试信息

如果你想以某种方式在实体的调试输出中包含它,那么你将不得不覆盖EntityTrait::__debugInfo()方法并在那里添加变异属性。

简单示例,在您的实体类中(您可以创建一个基本实体类,您的所有实体都会扩展,以便您在所有实体中都具有此功能):

public function __debugInfo()
{
    $info = parent::__debugInfo();

    $info['propertiesIncludingPossiblyMutatedValues'] =
        $this->extract(array_keys($this->_properties));

    return $info;
}

或者,如果您只想看到那些真正发生变异的那些:

public function __debugInfo()
{
    $info = parent::__debugInfo();

    $info['mutated'] = array_diff(
        $this->extract(array_keys($this->_properties)),
        $this->_properties
    );

    return $info;
}

这应该会让你了解事情是如何运作的。