【问题标题】:idiorm with respect validation attribute method always fails关于验证属性方法的惯用语总是失败
【发布时间】:2013-11-21 08:15:59
【问题描述】:

有没有人能够成功地使用带有 Idiorm 结果对象的 Respect Validation 库?似乎尊重验证仅适用于香草,不确定这是否是正确的术语,对象。惯用结果对象允许您使用 $user->name 访问属性,但是当您 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);

【问题讨论】:

    标签: php idiorm respect-validation


    【解决方案1】:

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

    让我知道这是否有效,我还没有测试过。有些规则的名称可能有误……但我想你可以知道我的目的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-09
      • 2016-01-18
      • 1970-01-01
      • 2012-05-31
      • 2016-03-25
      • 2011-01-07
      • 2018-09-26
      • 2011-06-12
      相关资源
      最近更新 更多