pitch / form
表单操作
Requires
- php: >=7.4
- pitch/annotation: ^1
- symfony/form: ^5.4.9 || ^6
Requires (Dev)
- doctrine/annotations: ^1.12
- phpunit/phpunit: ^9.5.21
- squizlabs/php_codesniffer: ^3.7.1
- symfony/form: ^5.4.9 || ^6
- symfony/framework-bundle: ^5.4.9 || ^6
- symfony/http-kernel: ^5.4.9 || ^6
This package is auto-updated.
Last update: 2024-09-22 14:45:47 UTC
README
简化控制器处理表单输入。
用法
注解控制器
通过注解所需的 FormType 来保持创建和处理表单输入在你的控制器之外。
namespace App\Controller; use App\Form\MyFormType; use Pitch\Form\Form; class MyController { #[Form(MyFormType::class)] public function __invoke($data) { // Just handle the data of a valid form. // If the form is not submitted yet or the input is invalid, // the controller will not be called and the // Symfony\Component\Form\FormInstance will be returned. } }
如果已安装,此功能也支持 Doctrine Annotations。
处理 FormInstance
控制器返回值
Symfony 需要控制器返回一个 Symfony\Component\HttpFoundation\Response
。但您可以在 kernel.view
事件上转换其他返回值(如 FormInstance
)。添加您自己的 事件订阅者 或使用 pitch/symfony-adr 添加一个 ResponseHandler。
在控制器中使用表单
就像有效表单的数据一样,FormInstance
会根据 [请求属性](https://symfony.com.cn/doc/current/components/http_foundation.html#accessing-request-data) (https://symfony.com.cn/doc/current/components/http_foundation.html#accessing-request-data) 传递给控制器。如果存在与属性同名的参数,则 [Symfony 的 RequestAttributeValueResolver](https://symfony.com.cn/doc/current/controller/argument_value_resolver.html#built-in-value-resolvers) 会将其注入到控制器中。默认情况下,属性名称为 data
和 form
,但在发生冲突的情况下,您可以通过注解提供其他名称。
namespace App\Controller; use App\Form\MyFormType; use Pitch\Form\Form; use Symfony\Component\Form\FormInterface; class MyController { #[Form( MyFormType::class, dataAttr: 'myData', formAttr: 'myForm', )] public function __invoke( Request $request, FormInterface $myForm, $myData, ) { } }
您可以通过注解 #[Form(MyFormType::class, returnForm: false)]
或配置参数 pitch_form.returnForm: false
来防止自动返回无效或未提交的表单。
使用数据实体
namespace App\Controller; use App\Form\MyFormType; use App\Form\MyFormEntity; use Pitch\Form\Form; class MyController { #[Form( MyFormType::class, entity: MyFormEntity::class, )] public function __invoke(MyFormEntity $data) { } }
如果实体不能仅通过调用构造函数来创建,您可以将实现 Pitch\Form\FormEntityFactoryInterface
的工厂作为服务注册。
namespace App\Controller; use App\Form\MyFormType; use App\Form\MyFormEntity; use Pitch\Form\Form; class MyController { #[Form( MyFormType::class, entityFactory: 'myFactoryId', )] public function __invoke(MyFormEntity $data) { } }