首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Laravel验证:分组验证

Laravel验证:分组验证
EN

Stack Overflow用户
提问于 2016-05-06 21:38:02
回答 2查看 789关注 0票数 0

我正在尝试向我的请求验证器添加对一组字段的验证,以确保这组字段不会超过一定数量。一旦用户提交了他们的表单,他们就可以查看pdf格式的表单,我的目标是确保f_namem_namel_name的集合不会碰到pdf上的另一组文本(从而使其难以辨认)。

本质上,我想要这样的东西:

代码语言:javascript
复制
public function rules()
{
  return [
    'f_name' + 'm_name' + 'l_name' => 'max:50',
    ...
  ];
}

我已经到处搜索了,但我能找到的唯一相关的问题就是如何进行验证。如果有人知道如何在验证中对值进行分组或链接到之前提出的问题,请让我知道。谢谢伙计们。

EN

回答 2

Stack Overflow用户

发布于 2016-05-06 21:56:35

Laravel不支持使用一个规则堆栈进行多字段验证。尝试编写自定义验证器或重新发明轮子:

代码语言:javascript
复制
public function rules()
{
    $fields = [
        "max: 50" => ["f_name", "m_name", "l_name"]
    ];
    $rules = [];

    foreach($fields as $rule => $fieldArray){
        if(is_array($fieldArray)){
            foreach($fieldArray as $field){
                $rules[$field] = $rule; 
            } 
        }
    }
  return $rules;
}
票数 0
EN

Stack Overflow用户

发布于 2016-05-06 22:04:21

您需要一个自定义验证器,以便可以添加多个字段。在您的AppServiceProvider中,如下所示:

代码语言:javascript
复制
class AppServiceProvider extends ServiceProvider
{
    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {
        Validator::extend('groupedFieldsLongerThan50', function($attribute, $value, $parameters, $validator) {
            $f_name = array_get($this->data, $parameters[0]);
            $m_name = array_get($this->data, $parameters[1]);
            $l_name = array_get($this->data, $parameters[2]);

            if((strlen($f_name)+strlen($m_name)+strlen($l_name))<=50)
                  return true;

            return false;
        });
    }

    ...

在您声明规则的位置添加:

代码语言:javascript
复制
'f_name' => 'groupedFieldsLongerThan50:f_name,m_name,l_name'
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37073865

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档