【问题标题】:In Laravel 4, How are the merging rulesets implemented?在 Laravel 4 中,合并规则集是如何实现的?
【发布时间】:2015-04-14 08:21:14
【问题描述】:

我正在使用dwightwatson/validating 包在模型中创建验证规则。

我特别喜欢您可以为不同路线创建的自定义规则集。

型号

protected $rulesets = [
        'set_up_all' => [
            'headline' => 'required|max:100',
            'description' => 'required'
        ],
        'set_up_property' => [
            'pets' => 'required'
        ],
        'set_up_room' => [
            'residents_gender' => 'required',
            'residents_smoker' => 'required'
        ],
        'set_up_roommate' => [
            'personal_gender' => 'required',
            'personal_smoker' => 'required'
        ]
    ];

控制器

$post = new Post(Input::all());

if($post->isValid('set_up_all', false)) {
  return 'It passed validation';
} else {
  return 'It failed validation';
}

在上面的示例中,它可以很好地针对 set_up_all 规则集进行验证。现在我想组合几个规则集并一起验证它们。

根据文档,该软件包提供了merge rulesets 的方法。我只是不知道如何将提供的示例集成到我当前的流程中。

根据文档,我需要实现这一行:

$mergedRules = $post->mergeRulesets('set_up_all', 'set_up_property_room', 'set_up_property');


这是我的尝试,但没有成功:

if($mergedRules->isValid()) { ...

我收到以下错误:

调用数组上的成员函数isValid()


我也试过这个,但也没有用:

if($post->isValid($mergedRules)) { ...

我收到以下错误:

array_key_exists():第一个参数应该是字符串或者整数


关于如何实施合并规则集有什么建议吗?

【问题讨论】:

  • 我相信该方法被命名为mergeRules() 而不是mergeRulesets()
  • 当我尝试 mergeRules() 时,我收到以下错误:“调用未定义的方法 Illuminate\Database\Query\Builder::mergeRules()”。你为什么认为会这样?

标签: php validation laravel package validationrules


【解决方案1】:

我已经发布了 Laravel 4.2 (0.10.7) 软件包的更新版本,现在允许您将规则传递给 isValid() 方法以针对它们进行验证。

$post->isValid($mergedRules);

其他答案也可以,但这种语法更好(并且不会覆盖模型上的现有规则)。

【讨论】:

    【解决方案2】:

    据我所知 - mergeRulesets() 返回一个规则数组。

    所以如果你这样做 - 它可能会起作用:

    $post = new Post(Input::all());
    $post->setRules($post->mergeRulesets('set_up_all', 'set_up_property_room', 'set_up_property'));
    if($post->isValid()) { 
         ///
    }
    

    【讨论】:

      猜你喜欢
      • 2016-02-16
      • 2020-03-31
      • 2021-07-30
      • 1970-01-01
      • 1970-01-01
      • 2014-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多