我正在尝试处理用户从我的实体对象生成的错误。
为了做到这一点,我在我的实体对象中有一个errors
属性。
我当前的问题是,某些实体具有实体作为属性,因此那些子实体也具有errors
属性。
class Entities
{
protected $errors = [];
// methods...
}
class User extends Entities
{
protected $nick
$someStuff;
public function setNickName($val)
{
if (empty($val))
{
$this->errors[] = 'Incorrect nick';
}
$this->nick = $val;
}
public function getNickName()
{
return $this->nick;
}
public function setSomeStuff(EntityObj $val)
{
$this->someStuff = $val;
}
public function getSomeStuff()
{
return $this->someStuff;
}
}
class EntityObj extends Entities
{
protected $something;
public function setSomething($val)
{
if //some verifications
{
$this->errors[] = 'problem';
}
$this->something = $val;
}
}
我想做的就是获取我的子实体的errors
属性,将其放入我的errors
主实体的属性中,这样我就可以轻松地在我的控制器。
是否可以从子实体检测我的errors
变量上的更改,然后将其放在我的errors
主实体上?到目前为止,我很难做到这一点。
答案 0 :(得分:0)
我认为您不必将错误存储在实体本身中。 我不知道您在这里使用的PHP版本,所以我想给您一些方法。 如果您使用> PHP 7编写代码,则应该使用typehints。这会阻止该实体至少使用空值。
您可以从
转换代码public function setNickName($val)
{
if (empty($val))
{
$this->errors[] = 'Incorrect nick';
}
$this->nick = $val;
}
到
public function setNickName(string $val)
{
$this->nick = $val;
}
但是我想您也不想将空字符串用作昵称,或者不想进行更多验证。在这种情况下,您对此类的使用期望没有得到满足,因此它可能会引发异常?每当您对应用程序的期望没有得到满足并且某些事情不正确时,它就会引发异常。
public function setNickName(string $val)
{
if($this->nick === ''){
throw new \UserException('Empty Nickname is not allowed.')
}
// more verification, more exceptions ...
$this->nick = $val
}
但是您可以猜到,这是许多开发人员遇到的问题。看一下在经常使用的框架https://symfony.com/doc/current/components/validator.html的验证器组件中。
tl; dr: 删除errors属性,您不必在实体本身中存储错误。 如果您使用PHP 7或更高版本来阻止代码进行验证,请开始使用typehints,php可以自己处理部分代码。 也许可以使用现有的库来解决您的问题。