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

3.4K00
  • 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

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

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

    3.9K30

    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.5K10

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

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

    3.8K10

    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,会找到HomeController的getIndex($name)方法,anyIndex可以不限制请求方式,驼峰名方法如getHomeIndex...’) 3.生成自定义响应的实例:new Response()、response() 4.生成重定向的响应:重定向响应是一个特殊的响应,只是在响应报文首部中包含了Location重定向字段,Laravel...:Controller基类使用了一个ValidatesRequests的trait,其中的validate()函数用于完成数据验证结果的判断、错误令牌存储以及重定向 2.表单请求验证:php artisan

    12K20

    Laravel 5.5 的自定义验证对象类

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

    3K90

    3分钟短文:Laravel的“南天门”,过滤掉七七八八的数据

    recipe创建的表单,post方法用于接收表单来的数据,我们先实现get的控制器方法。...validate 方法传入的第二个参数,是一个验证规则数组。...validate方法如何验证不通过,执行啥动作,也没见控制器内有什么捕获异常的代码?...是的,这是laravel框架写好了,如果验证失败,会使用 MessageBag 这些类来状态验证失败的信息,然后将错误信息渲染到公共模板部分,使用 $errors 接收,这是一个对象,可以手动遍历输出。...还有验证规则,千奇百怪,内置的规则都有很多,用得到的,用不到的,在处理复杂业务逻辑的时候, 还要祭出自定义验证规则这把大宝剑,不过都是后话了。

    1.1K00

    3分钟短文:Laravel的“南天门”,过滤掉七七八八的数据

    recipe创建的表单,post方法用于接收表单来的数据,我们先实现get的控制器方法。...request 对象,在验证器内默认会使用 request->all() 或 validate 方法传入的第二个参数,是一个验证规则数组。...validate方法如何验证不通过,执行啥动作,也没见控制器内有什么捕获异常的代码?...是的,这是laravel框架写好了,如果验证失败,会使用 MessageBag 这些类来状态验证失败的信息,然后将错误信息渲染到公共模板部分,使用 $errors 接收,这是一个对象,可以手动遍历输出。...还有验证规则,千奇百怪,内置的规则都有很多,用得到的,用不到的,在处理复杂业务逻辑的时候, 还要祭出自定义验证规则这把大宝剑,不过都是后话了。

    1.9K10

    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 规则是我们自定义的方法,二冒号后面的敏感字是该方法的参数,随后我们可以查看方法

    55010

    PHP-web框架Laravel-表单和验证

    一、表单创建在Laravel中,可以使用Laravel Collective表单包来创建表单。该表单包提供了一组实用函数,可以用来创建各种表单元素,如文本框、下拉列表、单选框等。...二、表单处理在表单提交后,需要将表单数据处理并保存到数据库中。在Laravel中,可以使用控制器来处理表单数据,并将其保存到数据库中。...在Laravel中,可以使用表单请求(Form Request)来实现表单验证。表单请求是一种特殊的请求类,可以通过rules方法定义表单字段的验证规则。...在该示例中,用户名和密码都是必填字段,用户名长度必须在3到20个字符之间,密码长度必须在6到20个字符之间。在控制器中使用表单请求时,可以通过validate方法进行表单验证。...四、错误处理在Laravel中,可以使用$errors变量来获取表单验证错误信息。如果表单验证失败,Laravel会自动将错误信息保存到$errors变量中,并将其传递给视图。

    2.5K30

    重构 - 设计API的扩展机制

    ,引用官网(插件)的说法,扩展的方式一般有以下几种: 1.添加全局方法或者属性,如: vue-custom-element 2.添加全局资源:指令/过滤器/过渡等,如 vue-touch 3.通过全局...mixin 方法添加一些组件选项,如: vue-router 4.添加 Vue 实例方法,通过把它们添加到 Vue.prototype 上实现。...5.一个库,提供自己的 API,同时提供上面提到的一个或多个功能,如 vue-router 基于VUE的扩展。在组件,插件的内容提供一个install方法。...ruleMsg = checkArr[i].msg || '字段格式错误'; //设置值为空则错误提示信息 nullMsg = checkArr[i]....nullMsg || '字段不能为空'; //设置长度错误提示信息 lenMsg = checkArr[i].lenMsg || '字段长度范围' + checkArr[

    1.5K170
    领券