首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何为laravel 8控制器中validate方法中的Rule::in字段设置自定义错误消息

在 Laravel 8 中,Rule::in 方法用于验证字段值是否在给定的值列表中。如果你想为这个验证规则设置自定义错误消息,可以通过以下几种方式实现:

1. 使用 messages 方法

你可以在控制器中使用 messages 方法来定义自定义错误消息。例如:

代码语言:txt
复制
use Illuminate\Validation\Rule;

public function store(Request $request)
{
    $request->validate([
        'field_name' => [
            Rule::in(['value1', 'value2', 'value3']),
        ],
    ], [
        'field_name.in' => '自定义错误消息:字段值必须在给定的列表中。',
    ]);

    // 处理请求
}

2. 使用 validator 方法

如果你更喜欢使用 validator 方法,可以在闭包中定义自定义错误消息:

代码语言:txt
复制
use Illuminate\Support\Facades\Validator;

public function store(Request $request)
{
    $validator = Validator::make($request->all(), [
        'field_name' => [
            Rule::in(['value1', 'value2', 'value3']),
        ],
    ], [
        'field_name.in' => '自定义错误消息:字段值必须在给定的列表中。',
    ]);

    if ($validator->fails()) {
        return redirect('route_name')
            ->withErrors($validator)
            ->withInput();
    }

    // 处理请求
}

3. 使用 ValidationMessages trait

你还可以在模型中使用 ValidationMessages trait 来定义自定义错误消息:

代码语言:txt
复制
use Illuminate\Validation\Rule;
use Illuminate\Foundation\Auth\User as Authenticatable;
use App\Traits\ValidationMessages;

class User extends Authenticatable
{
    use ValidationMessages;

    protected $fillable = [
        'field_name',
    ];

    public function store(Request $request)
    {
        $this->validate($request, [
            'field_name' => [
                Rule::in(['value1', 'value2', 'value3']),
            ],
        ]);

        // 处理请求
    }

    protected function validationMessages()
    {
        return [
            'field_name.in' => '自定义错误消息:字段值必须在给定的列表中。',
        ];
    }
}

4. 使用 FormRequest

如果你使用 FormRequest 类来处理验证,可以在类中定义自定义错误消息:

代码语言:txt
复制
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Validation\Rule;

class StoreRequest extends FormRequest
{
    public function authorize()
    {
        return true;
    }

    public function rules()
    {
        return [
            'field_name' => [
                Rule::in(['value1', 'value2', 'value3']),
            ],
        ];
    }

    public function messages()
    {
        return [
            'field_name.in' => '自定义错误消息:字段值必须在给定的列表中。',
        ];
    }
}

然后在控制器中使用这个 FormRequest 类:

代码语言:txt
复制
public function store(StoreRequest $request)
{
    // 处理请求
}

总结

以上方法都可以为 Rule::in 字段设置自定义错误消息。选择哪种方法取决于你的具体需求和偏好。通常情况下,使用 FormRequest 类是最推荐的方式,因为它将验证逻辑与控制器分离,使代码更加清晰和可维护。

参考链接

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

为你 Laravel 验证器加上多验证场景实现

前言 在我们使用 laravel 框架验证器,有的时候需要对表单等进行数据验证,当然 laravel 也为我们提供了 Illuminate\Http\Request 对象提供 validate...这些错误也会被闪存到 Session ,以便这些错误都可以在页面显示出来。如果传入请求是 AJAX,会向用户返回具有 422 状态代码和验证错误信息 JSON 数据 HTTP 响应。...如果验证未通过我们调用 getError() 方法来输出错误信息,getError()暂不支持返回所有验证错误信息 。...场景验证 我们需要提前在验证类定义好验证场景 如下,支持使用字符串或数组,使用字符串时,要验证字段需用 , 隔开 //自定义场景 protected $scene = [ 'add'= "title...$Validate- check($request_data,$rule,$message)) { var_dump($Validate- getError()); } } 通过验证场景,既减少了控制器代码臃肿

2.8K10
  • Laravel 参数验证疑与惑

    验证器怎么创建,谁创建 Laravel 文档调用验证器,除了通过控制器,还有就是通过Facades方式创建验证器对象。...然后在AppServiceProvider重新绑定新验证器工厂创建类; 二,AppServiceProvider通过resolver方法设置工厂类resolver属性,接管验证器实例化,例如:...1 通过extend方法扩展 //这是一个简单参数比较验证规则,Laravel5.8提供,Laravel5.5未提供 //验证规则如下: 'max_num'=>'gte:min', Validator...message方法,用于提供验证失败错误提示信息。 使用自定义验证类,相对于extend方法扩展有一个很大bug就是无法在自定义获取到当期验证器对象。...总结 通过以上源码学习,可以看出Laravel验证器创建都是用过验证器工厂类创建。如果需要自定义验证器,可以通过修改验证器工厂类,或者设置验证器工厂类resolver属性接管验证器实例化。

    3.4K00

    关于Laravel参数验证一些疑与惑

    验证器怎么创建,谁创建 Laravel 文档调用验证器,除了通过控制器,还有就是通过Facades方式创建验证器对象。...然后在AppServiceProvider重新绑定新验证器工厂创建类; 二,AppServiceProvider通过resolver方法设置工厂类resolver属性,接管验证器实例化,例如:...1 通过extend方法扩展 //这是一个简单参数比较验证规则,Laravel5.8提供,Laravel5.5未提供 //验证规则如下: 'max_num'= 'gte:min', Validator...message方法,用于提供验证失败错误提示信息。 使用自定义验证类,相对于extend方法扩展有一个很大bug就是无法在自定义获取到当期验证器对象。...从而导致在当前扩展验证规则,只能过获取到需要验证数据,而获取不到其他字段数据,无法进行联合字段验证。像上面比较两个字段大小验证规则就无法实现。

    6.6K31

    Laravel5.2之Validator

    ,MessageBag类里比较好用几个方法all()/get()/first()/has()等等,现在重新提交表单: 在表单页面就会显示验证错误信息!!!...5、定制显示错误信息 错误信息是由laravel默认,如果自定义显示错误信息,: public function postValidator(Request $request){ /...; } 只需要在validate(*)方法中加上$message[]参数就行,代码['person.*.name.required' => 'Required'],简单方便。...1、在TestValidatorRequest类里写验证规则 authorize()方法主要用来设置用户权限,返回false时会返回一个403并且控制器代码不能执行,没有权限用户不能提交表单。...一个好用PHP调试函数:debug_backtrace(),在laravel任意一个文件自己创建PHPTestController控制器postValidator()函数中加上一句: var_dump

    13.3K31

    Laravel 控制器中进行表单请求字段验证

    作为一个灵活框架,Laravel 提供了多种方式对表单请求进行验证,你可以在控制器通过 $this->validate() 方法验证用户请求,也可以通过单独表单验证类定义验证规则,再将其注入到相应控制器方法...我们可以在 $this->validate() 方法设置第三个参数来自定义错误消息: $this->validate($request, [ 'title' => 'bail|required...首先在 RequestController 修改 fileUpload 方法设置上传文件字段验证规则: $this->validate($request, [ 'picture' => '...,原理和上面通过 $this->validate() 一样,这是形式不同,这样做一个好处是在非控制器也可以对字段进行验证,因为 validate 毕竟是 ValidatesRequests 方法...对于大量请求字段,或者复杂请求验证,都写到控制器方法显然会导致控制器代码变得臃肿,可维护性也比较差,所以我们下一篇教程将讨论如何将验证代码移出控制器这一话题,并且根据项目需求灵活实现自定义验证规则

    5.8K10

    通过匿名函数和验证规则类自定义 Laravel 字段验证规则

    Laravel 验证器强大之处不仅在于提供前面提到多种请求验证方式,以及非常丰富字段验证规则(不同规则可以组合形成新验证规则),从 5.5 版本开始,还支持自定义字段验证规则。...通过匿名函数实现自定义规则 我们先演示下如何在控制器方法调用 $this->validate() 时自定义验证规则,以 title 字段为例,除了系统提供字段验证规则之外,有时候我们还会禁止用户输入包含敏感词字段...,在我们国家,这也是司空见惯事情,那要如何实现这个 Laravel 办不到事情呢,通过自定义验证规则: $this->validate($request, [ 'title' => [...如果检查到输入标题包含敏感词,则认为验证不通过,返回错误信息(我这里主要目的是演示如何自定义验证规则,实际环境不要这样校验敏感词哈,效率太低)。..., $value) { return strpos($value, '敏感词') === false; } 如果输入值包含敏感词,则认为验证失败,然后在 message 方法修改验证失败错误消息

    2.9K20

    Laravel 5.5 LTS 正式发布!

    按照惯例,接下来让我们罗列一下新版特性~ Whoops 回归 用过 Laravel 4 的人都会喜欢 Whoops 错误处理框架,它已经在 5.5 正式回归了!...Responsable 响应接口 Laravel 为响应方法新增了一个 Responsable 接口。 实现接口类可以从控制器方法返回。...请求验证方法Laravel 过去版本,你可以将请求实例传递给控制器 $this->validate() 方法: $this->validate(request(), [...]); 现在...你可以使用新 make:rule 命令创建自定义验证规则类: $ php artisan make:rule MyCustomRule Blade 模板命令 Auth & Guest 新功能文章列表也有提到过...包自动发现 虽然 Laravel 包不会很难安装,但是有了包自动发现功能之后,你就可以不用在服务容器设置提供器或别名。甚至,你还可以禁用特定软件包自动发现~ 人生苦短 我用 Laravel

    2.6K30

    Laravel系统3.3】控制器与表单验证

    不记得小伙伴可以回到我们最早文章 PHP那些魔术方法(二)https://mp.weixin.qq.com/s/8WgQ3eVYKjGaEd2CwnB0Ww 复习一下,在 Laravel ,我们会用到很多之前学习过基础知识...控制器调用 对于路由到控制器调用,还记得上篇文章中学习过 laravel/framework/src/Illuminate/Routing/Route.php 这个文件 run() 方法吗?...而验证规则,则是在 request validate() 方法配置这些。...其三,没有地方设置错误信息内容,比如说我们要显示中文错误信息。...方法进行参数和规则匹配,并通过 addFailure() 方法匹配对应提示消息信息,最后将这些信息放在 messages 属性

    8.7K20

    ThinkPHP6.0学习笔记-验证器

    ' ]; } 自动生成两个属性: $rule:定义规则 $message:定义错误信息 ,如果不定义错误信息提示默认错误信息 验证器定义之后,进行调用测试,创建一个Verify.php...独立验证: 上述各种验证规则都需要调用validate目录下验证器文件,而Think支持在控制器文件下独立验证;这种不依赖验证器文件调用方式是一种独立、唯一调用方式 namespace...$result){ dump($validate->getError()); } } } 独立验证支持闭包自定义方法:(不支持字段多规则) $validate = Validate...'], ]; 独立验证定义错误提示 ValidateRule::isEmail(null,'格式不正确') 参数一:验证规则 参数二:自定义错误提示 也可以独立使用message()方法:...scene()就成功限制只验证name和price两个字段 scene支持为单个场景单独定义方法方法命名规范是scene+场景名,采用驼峰写法; 同时在验证类中支持公共方法对场景细节进行定义

    1.4K10

    通过 Laravel 表单请求类实现字段验证和错误提示

    在上一篇教程,我们已经演示了如何在控制器方法对表单请求字段进行验证,并且提到如果请求字段很多很复杂,都写到控制器方法里面会导致控制器臃肿,从单一职责原则来说需要将表单请求验证拆分出去,然后通过类型提示方式注入到控制器方法...'url' => 'sometimes|url|max:200', 'picture' => 'nullable|string' ]; } 然后你可能要问那自定义错误提示消息在哪里定义呢...$request) { return response('表单验证通过'); } Laravel 底层在解析这个控制器方法参数时,如果发现这个请求是一个表单请求类,则会自动执行其中定义字段验证规则对请求字段进行验证...,如果验证成功则继续执行控制器方法,否则会抛出验证失败异常,和我们上一篇在控制器方法实现验证逻辑处理一样。...我们测试下表单请求,会发现和在控制器方法通过 $this->validate() 验证字段结果一样: ? 这样一来,以后我们就可以在表单请求类维护字段验证逻辑了,完成了请求验证和控制器解耦。

    3.9K30

    Laravel Validation 表单验证(一、快速验证)

    Laravel 提供了几种不同方法来验证传入应用程序数据。...默认情况下,Laravel 控制器基类使用 ValidatesRequests trait,它提供了一种方便方法去使用各种强大验证规则来验证传入 HTTP 请求。...正如前面所提到Laravel 会自动把用户重定向到之前位置。另外,所有的验证错误信息会被自动 存储到 session。 重申一次,我们不必在 GET 路由中将错误消息显式绑定到视图。...关于可选字段注意事项 默认情况下,在 Laravel 应用全局中间件堆栈 App\Http\Kernel 类包含了 TrimStrings 和 ConvertEmptyStringsToNull...当我们对 AJAX 请求中使用 validate 方法时,Laravel 并不会生成一个重定向响应,而是会生成一个包含所有验证错误信息 JSON 响应。

    3.7K10

    ThinkPHP自定义验证类规则

    代码实践 .控制器代码 //****** 该函数为控制器代码 /** * 测试自定义验证方法 */ public function index() { $id...use think\Validate; class TestValidate extends Validate { // 设置验证规则(这里paramIsNum就是自定义验证规则)...string $value 验证内容 * @param string $rule 验证规则 * @param $data * @param string $field 验证字段名...内置require验证,其实就是底层一个require方法. 2.我们自定义验证类是继承了父类Validate....通过oop思想,我们知道既然继承了父类,我们可以给父类进行重写、重载等操作. 3.实现自定义方法 通过上面两点,我们就明白我们自定义方法其实就是类似于在父类中去写了一个我们自定义方法一样.

    2.1K20

    Laravel框架关键技术解析

    query()方法(new static)->newQuery(); F.Laravel中使用其他新特性 1.trait 优先级:当前类方法会覆盖trait方法,trait方法会覆盖基类方法...phpunit:包含程序单元测试模块文件 B.Laravel框架应用程序三个重要环节 1.路由 作用:根据请求资源定位符不同,将用户请求按照事先规划方案提交给指定控制器或者功能函数来处理 基础路由设置.../控制器方法名/路由参数”,/home/index/xiaoming,会找到HomeControllergetIndex($name)方法,anyIndex可以不限制请求方式,驼峰名方法getHomeIndex...’) 3.生成自定义响应实例:new Response()、response() 4.生成重定向响应:重定向响应是一个特殊响应,只是在响应报文首部包含了Location重定向字段Laravel...:Controller基类使用了一个ValidatesRequeststrait,其中validate()函数用于完成数据验证结果判断、错误令牌存储以及重定向 2.表单请求验证:php artisan

    11.9K20

    Laravel 验证码认证学习记录小结

    验证规则中加入如下代码: 'captcha' = ['required', 'captcha'], 邮箱认证 laravel 自带邮箱认证 laravel 自带邮箱认证文件位于 vendor...() 发送 Email 认证消息通知,触发邮件发送; getEmailForVerification() 获取发送邮件地址,提供这个接口允许你自定义邮箱字段。...发送邮件 我们使用了 Laravel 自带 RegisterController ,控制器通过加载 Illuminate.oundation.uth.egistersUsers trait 来引入框架注册功能...(); } } } 可以看出 Laravel 默认已经为我们设置了邮件发送逻辑,接下来我们来测试一下。...测试邮件 测试之前,我们先设置下邮件发送到 log ,以便后面的测试: 修改环境设置文件.env MAIL_DRIVER=log 邮件一般发在 storage/logs 目录下日志文件 以上就是本文全部内容

    2.8K51

    laravel框架学习记录之表单操作详解

    提供了validate方法来用于验证用户提交表单是否符合要求,例如在页面通过post提交了学生表单form后,在controller对其先进行验证,如果正确则存入数据库,否则返回到上一页面并抛出一个异常...errors,在页面显示错误errors信息 //表单验证 $request- validate([ 'Student.name'= 'required|max:10', 'Student.age...请输入学生姓名" required是你所需要验证规则,中间用”|”隔开,详细规则可以看文档 validate()第二个数组自定义验证出错后提示信息,”:attribute”为占位符 validate...()第三个数组自定义每个字段提示名字 在页面中报错如下: ?...这是由于laravel自动设置了防止CSRF跨域攻击,你需要在表单内添加csrf_filed()来告诉laravel请求发起人与表单提交者是同一个人。

    12.6K30

    Laravel 5.5 自定义验证对象类

    Laravel 5.5 将提供一个全新自定义验证规则对象,以作为原来 Validator::extend 方法替代。...Laravel 表单验证是比较方便,而且内置了大量可用验证规则,但不管官方提供了多少,总还是会有满足不了需求时候。...但在 Laravel 5.5 版本,我们有了新手段,只要定义一个实现 Illuminate\Contracts\Validation\Rule 接口类即可实现自定义验证规则,并可以直接使用。...ImplicitRule { ... } 采用 Laravel 5.5 新增自定义验证类,可以更好地管理大量自定义验证规则,而且在 PHPStorm 之类 IDE ,从验证代码里快速跳转到对应验证类代码也会更方便...最佳方法是在编写 Controller 过程中用匿名函数快速验证自定义规则,然后再把它移到自定义验证类对象

    3K90

    11 验证器《ThinkPHP6 入门到电商实战》

    ', ]; } 以上代码可以看到,当前 User 类继承至验证器 Validate 类,其中 protected 属性 rule 是表示验证规则,为一个数组;name 表示这个字段名...在 check 方法需要传入一个数组,数组值为需要验证字段信息,在以上示例 email 是错误邮箱编写格式,此时将会抛出异常: 三、设置批量验证 在以上一点已经说过,验证是会中断,...若有多个错误信息时,需要批量验证的话可以设置 batch 为 true 即可,如下示例: public function userValidate(){ try { validate...dump($e->getError()); } } 以上实例,我 age 值明显大于了本身规则限定在 120 以内,所以此时将会抛出两个提示: 四、自定义验证规则 验证器还支持自定义验证规则...true : '敏感字符'; } } 此时修改了 rule 验证规则 name,其中有一个 checkName 规则是我们自定义方法,二冒号后面的敏感字是该方法参数,随后我们可以查看方法

    53810
    领券