revati/laravel-validation

此包的最新版本(dev-master)没有提供许可信息。

Laravel 验证扩展,用于错误时抛出 ValidationException

dev-master 2014-02-02 21:36 UTC

This package is not auto-updated.

Last update: 2024-09-28 15:23:45 UTC


README

以两种方式提供验证支持。

  • 抛出 ValidationException 和可配置的响应
  • 带有便捷功能的 BaseValidator 抽象类

可能性

  • 无需担心验证失败(ValidationException)时会发生什么。
  • 可以动态地为验证规则分配修饰符
// In ResourceValidator that extends Revati\Validation\BaseValidator
$rules = [
    'title' => 'required'
    'endDate'  => 'after:[afterDate]'
];

$resourceValidator->addModifier('date', 'afterDate', Input::get('startDate'));

// So [afterDate] will be replaced with 3th parameter

安装

首先通过 Composer 安装此包。编辑您的项目 composer.json 文件以需要 revati/validation

"require": {
    "laravel/framework": "4.1.*",
    "revati/validation": "dev-master"
}

接下来,在终端中更新 Composer

composer update

此操作完成后,下一步是添加服务提供者。打开 app/config/app.php,并向 providers 数组添加一个新项目。

// 'Illuminate\Validation\ValidationServiceProvider',
'Revati\Validation\ValidationServiceProvider'

这就完成了!您已经准备好开始使用了。

BaseValidator

  • 为每个资源创建单独的 Validator 文件(应扩展 Revati\Validation\BaseValidator
  • 设置应用于资源的所有规则

获取特定规则

  • getRules 方法接受一个参数(数组),包含从全局 $rules 中提取的所有规则列表。
// Will get only title rules
$validator->getRules(array('title'));

// Will get title rules and overwrite description rules
$validator->getRules(array('title', 'description' => 'min:200'));

动态规则修饰符

在 URL 中指定修饰符钩子,如下所示:[modifier]

// Change hook value
// Modifier should bee passed without square brackets
$validator->addModifier('field', 'min', 20);

// As field name can be passed `*` to search in all field rules.
$validator->addModifier('*', 'max', 100);

// Modifiers can be be grouped
$validator->addModifier('field', 'min|max', 10);

ValidationException

注意:默认情况下,异常抛出是启用的。因此,如果您不需要它,可以通过包配置禁用它。

php artisan config:publish revati/validation

无论您在哪里需要验证某些内容

// ...

// Validate $input against $rules like usual.
// No need to catch response because if errors will occur, exception
// will be thrown and necessary response returned.
Validator::make($input, $rules);

// If got to this point validation passed
$user = User::create($input);

// For validation only (without throwing exception)
$validator = Validator::sotfMake($input, $rules);

// To disable or enable exception throwing at runtime use fallowing methods:
Validation::disable();
Validation::enable();

// To change response at runtime use fallowing method
Validation::setResponse($responseClosure, $ajaxResponseClosure);

// Change only one response
Validation::setResponse($responseClosure);
Validation::setResponse(null, $ajaxResponseClosure);

// ...

如果发生错误,将返回以下响应

// For "regular" request
return \Redirect::back()
    ->withInput()
    ->withErrors($e->getErrors());

// For ajax request
return \Response::json(array(
    'success' => false,
    'errors' => $e->getErrors()->toJson()
), 400);

// $e stands for ValidationException witch (for now) only has one method
// to return errors -> getErrors.

自定义

这些响应在包配置文件中定义为闭包,因此只需发布包配置,就可以修改在哪种情况下应用程序应该做什么。

php artisan config:publish revati/validation

待办事项

这可能超出了此包的范围,但计划添加一个简单的 JavaScript 文件来自动化表单提交和错误响应中的错误显示。