ray/validate-module

Ray.Di 的验证模块

1.0.1 2018-02-13 06:52 UTC

This package is auto-updated.

Last update: 2024-09-07 06:09:25 UTC


README

Scrutinizer Code Quality Code Coverage Build Status Build Status

安装

Composer 安装

$ composer require ray/validate-module

模块安装

use Ray\Di\AbstractModule;
use Ray\AuraSqlModule\AuraSqlModule;
use Ray\AuraSqlModule\Annotation\AuraSqlConfig;

class AppModule extends AbstractModule
{
    protected function configure()
    {
        $this->install(new ValidateModule);
    }
}

使用方法

使用 @Valid 注解标注目标方法。

use Ray\Validation\Annotation\Valid;

class User
{
    /**
     * @Valid
     */
    public function createUser($name)
    {
        // ...
    }

在同一类中提供 onValidate 注解的方法进行验证。方法名称可以自由命名。

use Ray\Validation\Annotation\OnValidate;
// ...

    /**
     * @OnValidate
     */
    public function onValidate($name)
    {
        $validation = new Validation;
        if (! is_string($name)) {
            $validation->addError('name', 'name should be string');
        }

        return $validation;
    }

在验证方法中验证所有参数。如果验证失败,使用 addError($name, $message) 添加无效参数名称和消息。

验证失败时抛出 Ray\Validation\Exception\InvalidArgumentException 异常,但如果存在 @OnFailure 注解的方法,则返回 @OnFailure 方法的结果而不是原始结果。

use Ray\Validation\Annotation\OnFailure;
// ...

    /**
     * @OnFailure
     */
    public function onFailure(FailureInterface $failure)
    {

        // original parameters
        list($this->defaultName) = $failure->getInvocation()->getArguments();

        // errors
        foreach ($failure->getMessages() as $name => $messages) {
            foreach ($messages as $message) {
                echo "Input '{$name}': {$message}" . PHP_EOL;
            }
        }
    }

如果需要在同一类中进行多次验证,可以在注解属性中命名验证,如下所示。

use Ray\Validation\Annotation\Valid;
use Ray\Validation\Annotation\OnValidate;
use Ray\Validation\Annotation\OnInvalid;
// ...

    /**
     * @Valid("foo")
     */
    public function fooAction($name, $address, $zip)
    {
    
    /**
     * @OnValidate("foo")
     */
    public function onValidateFoo($name, $address, $zip)
    {

    // ...
    /**
     * @OnInvalid("foo")
     */
    public function onInvalidFoo(FailureInterface $failure)
    {
    // ...

示例

$ php docs/demo/run.php
// It works!