调试实体时如何显示脏值

How to show dirty values when debugging entity

我需要使用 _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($entity->extract($entity->visibleProperties()));

这不会包括在 $_hidden 属性 中定义为 "hidden" 的那些,如果您也需要它们,则必须明确包括它们

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

扩展调试信息

如果您想以某种方式将其包含在一般实体的调试输出中,那么您将必须覆盖 EntityTrait::__debugInfo() 方法并在其中添加变异的属性。

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

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;
}

这应该可以让您了解事情是如何运作的。