【问题标题】:custom Laravel Validation Rule example自定义 Laravel 验证规则示例
【发布时间】:2016-11-14 03:19:58
【问题描述】:

我很难弄清楚如何在 Laravel 5.1 中编写自定义验证规则。我读过documentation,但似乎不完整。仔细看,我只是看不到我应该把我的实际验证逻辑放在哪里,比如if (stristr($string, 'test')) { ...等等。

另一方面,它没有显示错误消息定义应该在哪个方法/数组中:

"foo" => "Your input was invalid!",

"accepted" => "The :attribute must be accepted.",

// The rest of the validation error messages...

我的实际用例有些奇怪,所以对于这个问题,我们以验证安全密码为例。安全密码必须至少有 8 个字符长,包含一个小写和大写字母、一个数字和一个特殊字符。

实际上,对于一个例子来说,这是一个相当高的要求,那么只检查一个数字怎么样?或者对值运行任何字符串函数?

如何创建这样的验证规则?

【问题讨论】:

  • 你检查过这个链接 - laravel.com/docs/5.1/validation#custom-validation-rules 吗?添加新的自定义验证更容易
  • @Jobayer 我在我的问题中确实把它联系起来了。
  • 我认为如果有人想用不在表格中的东西进行验证,就会遇到这个问题。我也在寻找答案。
  • 我使用“手动创建验证器”和 After Validation Hook 来解​​决这个问题

标签: validation laravel-5


【解决方案1】:

document you've linked 中所述,您需要使用静态extend 方法将验证逻辑放入ServiceProviderboot 函数中(例如AppServiceProvider)。

这是一个简短的示例(与文档中的示例相关联)。

<?php

namespace App\Providers;

use Validator;
use Illuminate\Support\ServiceProvider;

class AppServiceProvider extends ServiceProvider
{
    public function boot()
    {
        Validator::extend('yourFunctionNameHere', function($attribute, $value, $parameters, $validator) {
            return $value == 'yourTestValueHere'; //change the body as you need it
        });
    }
} 

用户的输入分配给$value

【讨论】:

  • 这是我不明白的——我在哪里实际测试值?我应该把if (strlen($string)) &lt; 12 ) {...之类的东西放在哪里?
  • 值是用户插入的文本/字符串;)
  • 您是否真的进行了自己的自定义验证,或者您只是从文档中复制?你的例子没有回答我提出的问题。
  • sitepoint.com/… 正是您所需要的。当我需要这样的东西时,我会做一些不同的事情,但它会让你继续前进。只是你想如何构建它的问题。
  • 不是我真正的答案,但我有一些自定义验证规则可以扩展验证器。我的有一些细微差别。如果我有时间,我可以发布我自己的示例之一。
猜你喜欢
  • 2017-04-11
  • 2018-02-18
  • 2019-02-12
  • 2016-11-22
  • 2018-05-25
  • 1970-01-01
  • 2014-04-22
  • 2015-01-26
  • 2016-01-13
相关资源
最近更新 更多