关于验证属性方法的惯用语总是失败


idiorm with respect validation attribute method always fails

有没有人能够成功地将尊重验证库与 Idiorm 结果对象一起使用?似乎尊重验证仅适用于原版,不确定这是否是正确的术语,对象。Idiorm 结果对象允许您使用 $user->name 访问属性,但当您var_dump对象时,它显然只是映射到像具有属性的对象一样工作,但实际上并不是一个直接对象。

摘自下面的转储

object(ORM)[47]
  protected '_data' => 
    array (size=9)
      'id' => string '100000' (length=6)
      'name' => string 'test' (length=4)

下面的代码总是失败,因为尊重验证无法通过引用访问属性。有没有办法解决这个问题?按原样使用对象而不必将它们转换为数组会很棒。

$user= ORM::for_table('user')->find_one(5);
$userValidator = v::attribute('name', v::string()->length(1,32));
$userValidator->validate($user);

实际上没有name到对象的属性。这可能是通过不支持使用属性进行验证的魔术方法提供的(因为魔术方法不是属性)。

不过,您可以做的是在另一个验证器中使用此验证器来获取_data属性:


$user = ORM::for_table('user')->find_one(5);
$userDataValidator = v::arr()
                      ->key('name', v::string()->length(1,32));
$userObjectValidator = v::instance('ORM')
                        ->attribute('_data', $userDataValidator);
$userObjectValidator->validate($user);

让我知道这是否有效,我还没有测试过。有些规则可能使用错误的名称...但我想你可以知道我要做什么。