请问一下 Laravel 的表单验证如何优雅的使用

      $request->validate([
            'room_id' => 'required|integer|exists:room,id',
            'gift_id' => 'required|integer|exists:goods_gift,id',
            'target_member_id' => ['required',new exists_member_id],
            'number' => 'required|integer',
        ], [
        ]);

我建了一个rule文件

php artisan make:rule exists_member_id

还有一个方法是

        Validator::extend('exists_member_id', function($attribute, $value, $parameters) {
            $target_member_id_arr = explode(",", $value);
            foreach ($target_member_id_arr as $target_user_id) {
                $ret =Member::query()
                    ->where('id',$target_user_id)
                    ->exists();
                if(!$ret){
                    return false;
                }
            }
            return true;
        });
        $request->validate([
            'room_id' => 'required|integer|exists:room,id',
            'gift_id' => 'required|integer|exists:goods_gift,id',
            'target_member_id' => 'required|exists_member_id',
            'number' => 'required|integer',
        ], [
        ]);

1.使用 Validator::extend

2.使用 php artisan make:rule exists_member_id

请问一下laravel如何优雅的使用表单验证 用 extend 还是用 rule

《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
岁月流沙
最佳答案

我是这样写的:

1、php artisan make:rule exists_member_id
2、编写规则
3、在AppServiceProvider boot里面添加

Validator::extend('exists_member_id', '\App\Rules\ExistsMemberId@passes');

4、和正常用法一样:

'target_member_id' => 'required|exists_member_id',
4年前 评论
讨论数量: 7
岁月流沙

我是这样写的:

1、php artisan make:rule exists_member_id
2、编写规则
3、在AppServiceProvider boot里面添加

Validator::extend('exists_member_id', '\App\Rules\ExistsMemberId@passes');

4、和正常用法一样:

'target_member_id' => 'required|exists_member_id',
4年前 评论

博客:Laravel 自定义表单验证-自定义验证规则 我参考了这个建立了

<?php
namespace App\Validators;


use App\Member;

class ExistsMemberIdValidator
{
    public function validate($attribute, $value, $parameters, $validator)
    {
        $target_member_id_arr = explode(",", $value);
        foreach ($target_member_id_arr as $target_user_id) {
            $ret =Member::query()
                ->where('id',$target_user_id)
                ->exists();
            if(!$ret){
                return false;
            }
        }
        return true;
    }
}
4年前 评论

laravel中有一个自带的方法可以写验证区器Requests,在这个里面写好,在控制器中引用就可以了

4年前 评论
    protected $validators = [
        'exists_member_id'
    ];
    protected function registerValidators()
    {
        foreach ($this->validators as $rule) {
            Validator::extend($rule, "\\App\\Rules\\{$rule}@passes");
        }
    }

这样子写也可以吧~~

4年前 评论
岁月流沙 4年前

我改了一下~用你的代码 注册 rule

4年前 评论
自由与温暖是遥不可及的梦想

何必 不走验证层呢

4年前 评论

啥意思不明白 什么叫验证层

4年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!