diff --git a/README.JA.md b/README.JA.md index 6a7ffc2..59c7cd7 100644 --- a/README.JA.md +++ b/README.JA.md @@ -141,6 +141,54 @@ class MyForm extends AbstractAuraForm セキュリティレベルを高めるためにはユーザーの認証を含んだカスタムCsrfクラスを作成してフォームクラスにセットします。 詳しくはAura.Inputの[Applying CSRF Protections](https://github.com/auraphp/Aura.Input#applying-csrf-protections)をご覧ください。 +## Validation Exception + +以下のように `Ray\WebFormModule\FormVndErrorModule`をインストールするとフォームのバリデーションが失敗したときに`Ray\WebFormModule\Exception\ValidationException`例外が投げられるよになります。 + +```php +use Ray\Di\AbstractModule; + +class FakeVndErrorModule extends AbstractModule +{ + protected function configure() + { + $this->install(new WebFormModule); + $this->override(new FormVndErrorModule); + } +``` + +キャッチした例外の`error`プロパティを`echo`すると[application/vnd.error+json](https://tools.ietf.org/html/rfc6906)メディアタイプの表現が出力されます。 + +```php +http_response_code(400); +echo $e->error; + +//{ +// "message": "Validation failed", +// "path": "/path/to/error", +// "validation_messages": { +// "name": [ +// "Name must be alphabetic only." +// ] +// } +//} +``` + +`@VndError`アノテーションで`vnd.error+json`に必要な情報を加えることができます。 + +```php + /** + * @FormValidation(form="contactForm") + * @VndError( + * message="foo validation failed", + * logref="a1000", path="/path/to/error", + * href={"_self"="/path/to/error", "help"="/path/to/help"} + * ) + */ +``` + +このオプションのモジュールはAPIアプリケーションの時に有用です。 + ## Demo $ php -S docs/demo/1.csrf/web.php @@ -149,4 +197,3 @@ class MyForm extends AbstractAuraForm * PHP 5.5+ * hhvm - diff --git a/README.md b/README.md index 31efc78..d6ca62c 100644 --- a/README.md +++ b/README.md @@ -158,6 +158,53 @@ class MyController ``` You can provide your custom `AntiCsrf` class. See more detail at [Aura.Input](https://github.com/auraphp/Aura.Input#applying-csrf-protections) +## Validation Exception + +When we install `Ray\WebFormModule\FormVndErrorModule` as following, + +```php +use Ray\Di\AbstractModule; + +class FakeVndErrorModule extends AbstractModule +{ + protected function configure() + { + $this->install(new WebFormModule); + $this->override(new FormVndErrorModule); + } +``` +A `Ray\WebFormModule\Exception\ValidationException` will be thrown. +We can echo catched exception to get [application/vnd.error+json](https://tools.ietf.org/html/rfc6906) media type. + +```php +echo $e->error; + +//{ +// "message": "Validation failed", +// "path": "/path/to/error", +// "validation_messages": { +// "name": [ +// "Name must be alphabetic only." +// ] +// } +//} +``` + +More detail for `vnd.error+json`can be add with `@VndError` annotation. + +```php + /** + * @FormValidation(form="contactForm") + * @VndError( + * message="foo validation failed", + * logref="a1000", path="/path/to/error", + * href={"_self"="/path/to/error", "help"="/path/to/help"} + * ) + */ +``` + +This optional module is handy for API application. + ### Demo $ php -S docs/demo/1.csrf/web.php @@ -166,4 +213,3 @@ You can provide your custom `AntiCsrf` class. See more detail at [Aura.Input](ht * PHP 5.5+ * hhvm -