调试实体时如何显示脏值
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;
}
这应该可以让您了解事情是如何运作的。
我需要使用 _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;
}
这应该可以让您了解事情是如何运作的。