solidworx / form-handler-bundle
为 Symfony 表单提供简单的表单处理
Requires
- php: >=7.1.0
- symfony/event-dispatcher: ^4.4 || ^5.0 || ^6.0
- symfony/form: ^4.0 || ^5.0 || ^6.0
- symfony/framework-bundle: ^4.4 || ^5.0 || ^6.0
- symfony/http-foundation: ^4.4 || ^5.0 || ^6.0
- symfony/options-resolver: ^4.4 || ^5.0 || ^6.0
Requires (Dev)
- doctrine/common: ^2.7
- ocramius/proxy-manager: ^2.1
- phpstan/phpstan: ^0.12.8
- symfony/phpunit-bridge: ^5.0
This package is auto-updated.
Last update: 2024-09-04 15:38:46 UTC
README
FormHandler 组件尝试通过将表单处理卸载到独立的类来简化控制器的基本表单处理。
目录
要求
FormHandler 需要 PHP 7.1+ 和 Symfony 3.0+
安装
Composer
$ composer require solidworx/form-handler-bundle:^1.0
然后在您的 Symfony 应用程序中注册该包
<?php // app/AppKernel.php // ... public function registerBundles() { $bundles = [ // ... new SolidWorx\FormHandler\FormHandlerBundle(), ]; // ... )
使用
表单可以有一个实现了 FormHandlerInterface
接口的类。该接口公开了一个方法,可以从中检索表单
public function getForm(FormFactoryInterface $factory, Options $options);
此方法可以返回一个标准表单类型,或者使用工厂生成表单类型。
<?php use Symfony\Component\Form\FormFactoryInterface; use SolidWorx\FormHandler\FormHandlerInterface; use SolidWorx\FormHandler\Options; class MyFormHandler implements FormHandlerInterface { public function getForm(FormFactoryInterface $factory, Options $options) { // either return MyFormType::class; // or return $factory->create(MyFormType::class); } }
使用工厂的好处是,当您需要向表单传递附加信息或选项时,例如
return $factory->create(MyFormType::class, null, ['horizontal' => true]);
要注册您的表单处理程序,将其注册为服务
services: my.form.handler: class: MyFormHandler tags: - { name: 'form.handler' }
在您的控制器中,使用 form.handler
服务来处理您的表单
<?php class MyController extends Controller { public function addAction() { return $this->get('solidworx.form_handler')->handle(MyFormHandler::class); // MyFormHandler will automatically be pulled from the container if it is tagges with `form.handler` } }
这将处理表单的必要逻辑(提交表单和处理请求等)。
如果您需要处理失败的表单,则需要实现 FormHandlerFailInterface
接口
<?php use SolidWorx\FormHandler\FormRequest; use SolidWorx\FormHandler\FormHandlerInterface; use SolidWorx\FormHandler\FormHandlerFailInterface; use Symfony\Component\Form\FormErrorIterator; class MyFormHandler implements FormHandlerInterface, FormHandlerFailInterface { // ... public function onFail(FormRequest $formRequest, FormErrorIterator $errors, $data = null) { // Form submission has failed, probably due to a validation error. // Handle it here if you need specific custom logic } }
如果您需要处理成功的表单提交,则需要实现 FormHandlerSuccessInterface
接口
<?php use SolidWorx\FormHandler\FormRequest; use SolidWorx\FormHandler\FormHandlerInterface; use SolidWorx\FormHandler\FormHandlerSuccessInterface; class MyFormHandler implements FormHandlerInterface, FormHandlerSuccessInterface { // ... public function onSuccess($data, FormRequest $form) { // $data is the submitted data from the form, do something with it here // This will probably save info to the DB } }
向表单添加选项
如果您需要向表单传递选项,可以将它们作为数组添加到 FormHandler::handle
的第二个参数中
<?php class MyController extends Controller { public function addAction() { return $this->get('solidworx.form_handler')->handle(MyFormHandler::class, ['entity' => new Blog]); // MyFormHandler will automatically be pulled from the container if it is tagges with `form.handler` } }
这些选项将在 getForm
方法中作为 Options
对象可用
<?php use Symfony\Component\Form\FormFactoryInterface; use SolidWorx\FormHandler\FormHandlerInterface; use SolidWorx\FormHandler\Options; class MyFormHandler implements FormHandlerInterface { public function getForm(FormFactoryInterface $factory, Options $options) { return $factory->create(MyFormType::class, $options->get('entity')); } }
您还可以通过实现 FormHandlerOptionsResolver
接口来配置选项,以设置允许的选项、设置默认值、定义必需的选项等。
<?php use Symfony\Component\OptionsResolver\OptionsResolver; use SolidWorx\FormHandler\FormHandlerInterface; use SolidWorx\FormHandler\FormHandlerOptionsResolver; class MyFormHandler implements FormHandlerInterface, FormHandlerOptionsResolver { // ... public function configureOptions(OptionsResolver $resolver): void { $resolver->setRequired('entity'); $resolver->addAllowedTypes('entity', BlogEntity::class); $resolver->setDefault('another_options', 'myvalue'); } }
高级使用
这是组件的非常基础的使用。还有一些更高级的使用方法,您可以根据自己的需求定制表单的处理。
测试
要运行单元测试,请执行以下命令
$ vendor/bin/phpunit
贡献
参见 CONTRIBUTING
许可证
FormHandler 是开源软件,使用 MIT 许可证授权
有关完整的许可证,请参阅 LICENSE 文件。