有没有人能够使用带有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);
答案 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);
如果有效,请告诉我,我还没有测试过。有些规则可能有错误的名称......但我认为你可以了解我的目标。