idiorm与尊重验证属性方法总是失败

时间:2013-10-21 12:16:54

标签: php idiorm respect-validation

有没有人能够使用带有Idiorm结果对象的Respect Validation库?似乎Respect Validation只能用于vanilla,不确定这是否是正确的术语,对象。 Idiorm结果对象允许您使用$ user-> name来访问属性,但是当您对var_dump对象进行var_dump时,它显然只是映射为具有属性的对象,但实际上并不是直接对象。

从下面的转储中摘录

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

以下代码始终失败,因为Respect Validation无法通过引用访问该属性。有没有解决的办法?按原样使用对象会很棒,而不必将它们转换为数组。

$user= ORM::for_table('user')->find_one(5);

$userValidator = v::attribute('name', v::string()->length(1,32));

$userValidator->validate($user);

1 个答案:

答案 0 :(得分:0)

对象中实际上没有属性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);

如果有效,请告诉我,我还没有测试过。有些规则可能有错误的名称......但我认为你可以了解我的目标。