edvinaskrucas/validator-service

Laravel4 的验证服务

dev-master 2013-04-20 05:04 UTC

This package is auto-updated.

Last update: 2024-09-11 13:40:39 UTC


README

简单,但功能强大的验证服务,用于验证您的数据。

安装

由于它使用 composer 打包系统,您只需将此 "edvinaskrucas/validator-service": "dev-master"" 添加到您的 composer.json 文件中,并更新您的项目。

Laravel 服务提供者

当与 laravel4 一起使用时,您可能希望将以下行添加到您的配置文件中

ServiceProvider 数组

'Krucas\Service\Validator\ValidatorServiceProvider'

和 Alias 数组

'ValidatorService' => 'Krucas\Service\Validator\Facades\ValidatorService'

现在您可以使用外观的强大功能。

事件

验证服务使用事件让其他组件知道验证器正在执行一些检查。

在验证器实例创建后立即触发的事件

  • service.validator.creating
  • service.validator.creating: Vendor\Package\Class

在验证器实例创建后的触发事件

  • service.validator.created
  • service.validator.created: Vendor\Package\Class

在开始实际验证之前触发的触发事件

  • service.validator.validating
  • service.validator.validating: Vendor\Package\Class

验证后的触发事件

  • service.validator.validated
  • service.validator.validated: Vendor\Package\Class

让我们快速概述一下。

service.validator.creating

在规则和属性分配之前触发。如果某些监听器返回 false,则验证将自动返回 false 而不进行验证。

service.validator.creating: Vendor\Package\Class

与上面相同,只是有一个特定的类名。

service.validator.created

在创建新实例后立即触发,并分配规则和属性。如果某些监听器返回 false,则验证将自动返回 false 而不进行验证。

service.validator.created: Vendor\Package\Class

与上面相同,只是有一个特定的类名。

service.validator.validating

此事件首先触发,如果某些监听器返回 false,则将取消验证并返回 false

service.validator.validating: Vendor\Package\Class

事件几乎与上一个相同,但这个事件允许您监听要验证的特定类。其中 Vendor\Package\Class 将放置验证的类名。如果某些监听器返回 false,则将取消验证方法。

service.validator.validated

在验证返回 true 时触发的事件,此事件不会停止任何其他操作。

service.validator.validated Vendor\Package\Class

与上面几乎相同,但有一个类名。

所有事件都将传递一个 Krucas\Service\Validator\Validator 对象实例以进行操作。

使用方法

基本用法

您可以使用它来验证您的模型、表单和其他内容,您只需实现 ValidatableInterface 即可。

Eloquent 示例模型

class Page extends Eloquent implements Krucas\Service\Validator\Contracts\ValidatableInterface
{
    public function getValidationRules()
    {
        return array(
            'title'     => 'required|max:255',
            'content'   => 'required'
        );
    }

    public function getValidationValues()
    {
        return $this->attributes;
    }
}

现在您准备好验证它了。

$page = new Page();

$validatorService = ValidatorService::make($page);

if($validatorService->passes())
{
    return 'OK';
}
else
{
    $errors = $validatorService->getErrors();
}

此示例显示了如何轻松设置您的验证。

使用事件监听器的高级用法

此示例将展示更高级的使用(我在我的情况下使用了它)。

我们有一个名为 Routing 的包,基本上它所做的只是将一些 URL 存储到数据库中,并从多态关系解析对象。

让我们定义我们的可路由模型的接口。

interface RoutableInterface
{
    public function getUri();
}

现在我们需要处理所有可路由模型,在验证我们的数据时添加额外的检查,我们可以在监听某些事件时非常容易地做到这一点。

Event::listen('service.validator.validating', function(Validator $validatorService)
{
    // Check if our validatable object implements RoutableInterface
    // If it is, then add some extra rules and values for a validator
    if(in_array('RoutableInterface', class_implements($validatorService->getValidatable())))
    {
        $validatorService->setAttributeRules('uri', 'required|max:255|unique:uri,uri');
        $validatorService->setAttributeValue('uri', Input::get('uri'));
    }
});

就是这样,这将向每个可路由模型实例添加一些额外的规则和值,当它正在验证时。验证成功后,您可以向您的数据库中插入一些记录。