Laravel-请求验证

时间:2019-09-11 12:28:54

标签: laravel validation

我扩展了请求类来创建自己的验证规则。在该类中,我添加了自定义验证功能。在功能中,我检查标签是否通过了regEx,我想过滤标签以删除少于2个字符的标签。

,然后仅在请求中通过验证的标签。

tt <- df1[df1$proxy %in% v,]
tt <- tt[order(tt$orig, tt$dist),]
tt <- tt[!duplicated(tt$orig),c("orig", "proxy")]
tt$proxy[match(unique(df1$orig), tt$orig)]
#[1]  1 45 55

可以这样做吗?如何在Request类中设置它?

    public function createPost(PostRequest $request)
{
    dd($request->all()); //In this place I would like to keep only tags passed through validation not all tags recived in request
}

编辑: 我想我们想念我们。我想在验证之后只返回变量'tags' => [ 'nullable', 'string', function ($attribute, $value, $fail){ $tagsArray = explode(',', $value); if(count($tagsArray) > 5) { $fail(__('place.tags_max_limit')); } $tagsFiltered = []; foreach ($tagsArray as $tag){ $tag = trim($tag); if(preg_match('/^[a-zA-Z]+$/',$tag)){ $tagsFiltered[] = $tag; }; } return $tagsFiltered; } ], 中返回的标签,而不是在输入中获得的标签。

2 个答案:

答案 0 :(得分:0)

您必须创建此自定义正则表达式规则,并将其用于rules()函数中。

像这样:

public function rules()
{
    return [
        'tag' => 'regex:/[^]{2,}/'
    ];
}

public function createPost(PostRequest $request)
{
    $request->validated();
}

然后只需通过validated()函数在任意位置调用它即可。

答案 1 :(得分:-1)

首先使用以下命令定义验证规则:

php artisan make:rule TagsFilter

导航到TagsFilter规则文件并在passs方法中定义过滤器:

   public function passes($attribute, $value)
    {
                $tagsArray = explode(',', $value);
                $tagsFiltered = [];
                foreach ($tagsArray as $tag){
                    $tag = trim($tag);
                    if(preg_match('/^[a-zA-Z]+$/',$tag)){
                        $tagsFiltered[] = $tag;
                    };
                }

        return count($tagsArray) > 5 && count($tagsFiltered) > 0;
    }

然后将您的规则包括在控制器上的验证中

$request->validate([
    'tags' => ['required', new TagsFilter],
]);