Download the PHP package azyouness/request-to-form-bundle without Composer
On this page you can find all versions of the php package azyouness/request-to-form-bundle. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Download azyouness/request-to-form-bundle
More information about azyouness/request-to-form-bundle
Files in azyouness/request-to-form-bundle
Package request-to-form-bundle
Short Description Map HTTP request payloads to Symfony forms from controller attributes or a reusable mapper service.
License MIT
Homepage https://github.com/azyouness/request-to-form-bundle
Informations about the package request-to-form-bundle
Request To Form Bundle
Request To Form Bundle submits the current Symfony request to a Symfony Form directly from a controller argument.
Symfony already provides attributes such as #[MapRequestPayload] to map request data into typed objects like DTOs. This bundle provides a similar controller experience for applications that use Symfony Forms to submit and validate request data.
With #[MapRequestToForm], the request payload is submitted to a form. If the form is valid, the controller receives the mapped form data or the submitted form itself. If the form is invalid, an exception is thrown before the controller is called.
Here, $post is already the submitted and validated form data. The controller does not need to decode the request, create the form, submit it, check validity, or extract the data manually.
Requirements
- PHP
>=8.2 - Symfony
^7.4 || ^8.0
Installation
Register the bundle manually if Symfony Flex did not do it automatically:
Basic Usage
Add #[MapRequestToForm] to a controller argument.
The form type can be inferred when exactly one registered form type uses the controller argument class as its data_class.
If the form type cannot be inferred or multiple form types use the same data_class, pass it explicitly:
Automatic inference works when the form type exposes a data_class that can be inspected. If your form type needs runtime options, pass formType explicitly and provide formOptions, or use the RequestToFormMapper service.
If the form can return null data, the controller argument should be nullable:
Existing Data
When another Symfony resolver has already resolved the controller argument, the bundle submits the request into that object.
This is useful when submitting the request into existing data:
MapRequestToForm can also be combined with other argument attributes, such as Doctrine's MapEntity:
For nested create endpoints, disable entity resolution on the new entity argument:
Without #[MapEntity(disabled: true)], Symfony may also try to resolve Comment $comment from the same {id} route parameter before the form is submitted.
For PATCH and GET query requests, missing fields are kept by default. For other methods, missing fields are cleared by default. You can override this behavior with clearMissing.
Receiving The Form
If the controller argument type is FormInterface, the controller receives the submitted form.
This is useful when the controller needs access to the form object, not only its data.
You can also use another controller argument as the form data:
Root Scalar Forms
Root scalar form types are supported when the controller argument type matches the submitted form data.
Supported Request Formats
By default, json, form, and query request formats are accepted:
The supported formats are:
json: submits the decoded JSON request body.form: submits request parameters and uploaded files, includingmultipart/form-data.query: submits query parameters fromGETrequests.
You can also limit an action to one format:
Example using the query format:
Options
The same options are available on the mapper service where they make sense.
| Option | Available On | Description |
|---|---|---|
formType |
attribute, mapper | Symfony form type class. Required when it cannot be inferred. |
dataArgument |
attribute | Name of another controller argument to use as the form data. |
data |
mapper | Initial form data. Use it to submit into an existing object. |
formOptions |
attribute, mapper | Options passed to FormFactoryInterface::create(). |
clearMissing |
attribute, mapper | Value passed to FormInterface::submit(). Defaults to false for PATCH and GET query requests, true otherwise. |
acceptFormat |
attribute, mapper | Accepted request formats: json, form, query, or a list of them. |
throwOnInvalid |
mapper | Set to false to receive an invalid form instead of throwing. |
validationFailedStatusCode |
attribute, mapper | HTTP status code used when validation fails. Default is 422. |
Mapper Service
Use RequestToFormMapper directly when you need more control than the attribute gives you.
A common use case is preparing the form data before submitting the current request:
You can also pass the request explicitly:
The mapper throws when the form is invalid by default, like the attribute.
Disable this behavior when you want to handle the invalid form yourself:
Validation Failures
When validation fails, the bundle throws an HTTP exception with status code 422 by default.
The previous exception is FormValidationFailedException, which gives access to the invalid form.
All versions of request-to-form-bundle with dependencies
symfony/dependency-injection Version ^7.4 || ^8.0
symfony/event-dispatcher Version ^7.4 || ^8.0
symfony/form Version ^7.4 || ^8.0
symfony/framework-bundle Version ^7.4 || ^8.0
symfony/http-foundation Version ^7.4 || ^8.0
symfony/http-kernel Version ^7.4 || ^8.0
symfony/options-resolver Version ^7.4 || ^8.0