fadion/rule

Laravel的表达式验证规则构建器。

1.1 2015-06-12 18:47 UTC

This package is auto-updated.

Last update: 2024-09-21 20:25:51 UTC


README

这是一个简单的Laravel包,提供了一种构建验证规则的简洁替代方法。它使用您已经了解的Laravel验证知识,并在此基础上进行扩展。

而不是这个

$rules = [
    'username' => 'required|alpha',
    'email' => 'required|email'
];

您将编写

Rule::add('username')->required()->alpha();
Rule::add('email')->required()->email();

$rules = Rule::get();

哪种方法更易于阅读或编写是个人偏好的问题,所以我不偏不倚。然而,使用Rule提供了两个主要优势

  1. 拼写错误的规则名称、不存在的规则或缺失的参数将引发致命错误。相比之下,当您使用“reqiured”而不是“required”时,Laravel的规则将静默失败,并提供没有信息。
  2. IDE建议和自动完成。每个规则都是一个真实、有文档的方法,您的IDE可以轻松识别。结合Laravel IDE Helper,您很少需要打开Validator文档。

安装

  1. 将包添加到您的composer.json文件中,然后运行composer update
{
    "require": {
        "fadion/rule": "~1.1"
    }
}
  1. Fadion\Rule\RuleServiceProvider::class添加到您的config/app.php文件中,在providers数组内。

  2. 在您的config/app.php文件中的aliases数组内添加一个新别名:'Rule' => Fadion\Rule\Facades\Rule::class

Laravel 4请使用版本1.0

用法

如果您已经使用过Laravel的Validator,那么您已经知道如何使用Rule。它只是改变了编写规则的方式,但验证过程保持完全相同。

完整的验证示例

$inputs = Input::all();

Rule::add('username')->required()->alpha();
Rule::add('email')->required()->email();

$validator = Validator::make($inputs, Rule::get());

if ($validator->fails()) {
    Return::back()->withInput()->withErrors($validator);
}

带有参数的规则

规则参数作为简单方法参数处理。参数可以有一个或多个,具体取决于规则,其中一些也可以是数组(如:innot_inmimes等)。

Rule::add('date')->date_format('mm/dd/YYYY');
Rule::add('age')->between(5, 15);
Rule::add('role')->in(['Admin', 'Moderator', 'Editor']);

存在和唯一

existsunique是特殊情况,因为它们有少数定义和文档化的参数,以及动态的where子句。

Rule::add('username')->exists('users');
Rule::add('username')->exists('users', 'name');
Rule::add('username')->exists('users', 'name', 'id', 10);


Rule::add('email')->unique('users');
Rule::add('email')->unique('users', 'email_address', 10);
Rule::add('email')->unique('users', 'email_address', 10, 'account_id', 1);

自定义规则

Rule以与预定义规则相同的方式处理自定义规则。它甚至接受参数。

Validator::extend('foo', function($attribute, $value, $parameters) {
    return $value == 'foo';
});

Rule::add('name')->required()->foo();

数组规则

Laravel验证输入为array的规则已被重命名为is_array()。由于“array”是PHP中的保留字,不能用作方法名,因此进行了重命名。

Rule::add('languages')->is_array();

方法名

方法可以写成snake_case(Laravel接受的规则名称)或camelCase。两种情况行为完全相同,所以使用您感觉更好的。

所以,以下方法等价

Rule::add('date')->date_format('Y-m-d');
Rule::add('date')->dateFormat('Y-m-d');

Rule::add('username')->alpha_dash();
Rule::add('username')->alphaDash();

属性名称

Laravel有一个选项可以使用自定义属性来别名输入名称,作为构建更好错误消息的一种方式。Rule提供了创建它们的简单方法。

Rule::add('name', 'Your name')->required();
Rule::add('email', 'Your email')->required()->email();

$validator = Validator::make(Input::all(), Rule::get());

// Apply attributes
$validator->setAttributeNames(Rule::getAttributes());

消息

您不可能开始编写表达式的规则,同时将消息保持为数组。Rule将以非常优雅且易于使用的方式处理这些。只需在规则后添加一个message()方法即可。

Rule::add('email')
    ->required()->message("Email shouldn't be empty.")
    ->email()->message("Email appears to be invalid.");

Rule::add('password')
    ->required()->message("Password shouldn't be empty.")
    ->between(5, 15)->message("Make that password more secure!");

$rules = Rule::get();
$messages = Rule::getMessages();