$ composer require ray/validate-module
useRay\Di\AbstractModule;
useRay\AuraSqlModule\AuraSqlModule;
useRay\AuraSqlModule\Annotation\AuraSqlConfig;
class AppModule extends AbstractModule
{
protectedfunctionconfigure()
{
$this->install(newValidateModule);
}
}Annotate target method with @Valid annotation.
useRay\Validation\Annotation\Valid;
class User
{
/** * @Valid */publicfunctioncreateUser($name)
{
// ...
}Provide onValidate annotated method in same class for validation. Method can be named freely.
useRay\Validation\Annotation\OnValidate;
// .../** * @OnValidate */publicfunctiononValidate($name)
{
$validation = newValidation;
if (! is_string($name)) {
$validation->addError('name', 'name should be string');
}
return$validation;
}Validate all parameters in validation method. addError($name, $message) with invalid parameter name and message in the case of validation failed.
Ray\Validation\Exception\InvalidArgumentException thrown on validation failed, But if @OnFailure annoted method exists, The result of @OnFailure method returns instead of original.
useRay\Validation\Annotation\OnFailure;
// .../** * @OnFailure */publicfunctiononFailure(FailureInterface$failure)
{
// original parameterslist($this->defaultName) = $failure->getInvocation()->getArguments();
// errorsforeach ($failure->getMessages() as$name => $messages) {
foreach ($messagesas$message) {
echo"Input '{$name}': {$message}" . PHP_EOL;
}
}
}If you need multiple validation in one class, You can name validation at annotation property as follows.
useRay\Validation\Annotation\Valid;
useRay\Validation\Annotation\OnValidate;
useRay\Validation\Annotation\OnInvalid;
// .../** * @Valid("foo") */publicfunction fooAction($name, $address, $zip)
{
/** * @OnValidate("foo") */publicfunction onValidateFoo($name, $address, $zip)
{
// .../** * @OnInvalid("foo") */publicfunction onInvalidFoo(FailureInterface$failure)
{
// ...$ php docs/demo/run.php
// It works!


