ray / validate-module
Ray.Di 的验证模块
1.0.1
2018-02-13 06:52 UTC
Requires
- php: >=5.5.0
- ray/di: ^2.5
Requires (Dev)
- phpunit/phpunit: ^4.8
README
安装
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!