imatic / form-bundle
Symfony表单工作包
v5.2.1
2023-04-03 07:08 UTC
Requires
- php: ^7.2 || ^8.0
- doctrine/doctrine-bundle: ^2.0
- doctrine/orm: ^2.3
- symfony/expression-language: ^4.4 || ^5.0 || ^6.2
- symfony/form: ^4.4 || ^5.0 || ^6.2
- symfony/framework-bundle: ^4.4 || ^5.0 || ^6.2
- symfony/translation: ^4.4 || ^5.0 || ^6.2
- symfony/twig-bundle: ^4.4 || ^5.0 || ^6.2
- symfony/validator: ^4.4 || ^5.0 || ^6.2
- twig/twig: ^2.12 || ^3.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.4
- imatic/testing: ^6.0.0
- symfony/browser-kit: ^4.4 || ^5.0 || ^6.2
- symfony/phpunit-bridge: ^4.4 || ^5.0 || ^6.2
- symfony/security-bundle: ^4.4 || ^5.0 || ^6.2
- symfony/web-profiler-bundle: ^4.4 || ^5.0 || ^6.2
- symfony/yaml: ^4.4 || ^5.0 || ^6.2
- dev-master
- v5.2.1
- v5.2.0
- v5.1.0
- v5.0.5
- v5.0.4
- v5.0.3
- v5.0.2
- v5.0.1
- v5.0.0
- 5.0.0-alpha.2
- 5.0.0-alpha
- v4.x-dev
- v4.0.1
- v4.0
- v3.0.15
- v3.0.14
- v3.0.13
- v3.0.12
- v3.0.11
- v3.0.10
- v3.0.9
- v3.0.8
- 3.0.7
- 3.0.6
- 3.0.5
- 3.0.4
- 3.0.3
- 3.0.2
- 3.0.1
- 3.0
- 2.6.x-dev
- 2.6.2
- 2.6.1
- 2.6.0
- 2.4.1
- 2.4.0
- 2.3.x-dev
- 2.2.x-dev
- dev-dependabot/composer/twig/twig-3.14.0
- dev-update_symfony62
- dev-RESEARCH-220
- dev-v4_update
- dev-update_deps
- dev-entity_extension
- dev-nenadalm
This package is auto-updated.
Last update: 2024-09-12 07:20:40 UTC
README
ImaticFormBundle
表单类型
- Imatic\Bundle\FormBundle\Form\Type\AjaxChoiceType
- Imatic\Bundle\FormBundle\Form\Type\AjaxEntityChoiceType
- Imatic\Bundle\FormBundle\Form\Type\DateRangeType
- Imatic\Bundle\FormBundle\Form\Type\DateTimeRangeType
- Imatic\Bundle\FormBundle\Form\Type\RangeType
Ajax实体选择
使用XHR实现单个实体或实体集合的选择。
依赖项:jQuery, Select2
<?php use Imatic\Bundle\FormBundle\Form\Type\AjaxEntityChoiceType; class ExampleType extends AbstractType { public function buildForm(FormBuilderInterface $builder, array $options) { $builder->add('author', AjaxEntityChoiceType::class, [ 'class' => 'MyExampleBundle:User', 'route' => 'app_example_example_autocomplete', ]); } }
小部件将向指定的路由发送带有输入搜索词的GET请求。请求格式取决于 request_type
选项
filter
- ?filter[search][value]=termsimple
- ?search=term
应用程序应返回JSON响应,例如
[ {"id": 1, "text": "First Item"}, {"id": 2, "text": "Second Item"} ]
其他选项
multiple
- 允许多个项目被选中placeholder
- 如果没有项目被选中,则显示的文本query_builder
- QueryBuilder实例或 Closure(EntityManager $em, $class): QueryBuilderid_provider
- callable(object $entity): scalar (应返回实体的ID)text_provider
- callable(object $item): string (应返回实体的文本表示形式)request_type
- 过滤(默认)或简单route_attrs
- 自定义路由属性entity_manager
- 要使用的实体管理器名称
日期选择器
此示例显示如何通过表单扩展更改默认日期类型格式和修改moment配置。
<?php namespace App\Form\Extension; use Imatic\Bundle\FormBundle\Form\Extension\DatepickerExtension; use Symfony\Component\OptionsResolver\OptionsResolver; class DateTypeExtension extends DatepickerExtension { public function configureOptions(OptionsResolver $resolver) { parent::configureOptions($resolver); $resolver->setDefaults([ 'format' => 'dd.MM.yyyy', 'date_format' => 'DD.MM.YYYY', 'config_locale' => [ 'en' => [ 'week' => ['dow' => 1], ], ], ]); } public static function getExtendedTypes(): iterable { return [DateType::class]; } }
集合
此包提供添加、编辑和删除集合元素所需的JS功能。默认情况下,新添加的项目将带有前缀 new_
和随机数字,例如 new_16782845986841
。但这也可能导致服务器端验证错误。
从版本 5.2. 开始,可以在集合定义中使用 data_index
定义为 true
或 numeric
值,以从0...N计数集合中的项目。如果集合可以加载现有数据,则应在 data_index
值中指定项目数量。
<?php public function buildForm(FormBuilderInterface $builder, array $options) { $builder->add('collection', CollectionType::class, [ 'data_index' => $entity->getCollection()->count() ]); }
表单扩展
表单主题
此扩展允许您通过类型选项设置表单主题。
<?php class ExampleType extends AbstractType { public function buildForm(FormBuilderInterface $builder, array $options) { // example: setting template of child form (field) $builder->add('example', null, [ // override form theme template 'template' => 'MyBundle:Form:example_theme.html.twig', // pass extra variables to the theme templates when this field is rendered 'template_parameters' => [ 'foo' => 'bar', ], ]); } public function configureOptions(OptionsResolver $resolver) { // example: setting template of the form type itself $resolver->setDefaults([ 'template' => 'MyBundle:Form:example_theme.html.twig', 'template_parameters' => ['foo' => 'bar'], ]); } }
验证约束
数字
- 确保数字具有正确的精度和小数位数
选项
- 精度
- 小数位数
纬度
经度
NotNullGroup
此类级别约束确保所有给定属性都已设置或为null。
有效状态:所有属性为null,所有属性均不为null。
NotNullOneOf
此类级别约束确保至少有一个给定属性不为null。
有效状态:至少有一个属性不为null
示例
<?php use Imatic\Bundle\FormBundle\Validator\Constraints as ImaticAssert; /** * Evidence * * @ORM\Entity * @ImaticAssert\NotNullGroup(properties={"sitterFirstName", "sitterLastName", "sitterId", "sitterPhone", "sitterRelation"}) * @ImaticAssert\NotNullOneOf(properties={"mother", "father"}, message="Either the mother or the father information must be specified.") */ class Evidence { // ... }
数据转换器
EmptyEntityToNullTransformer
此转换器将实体对象转换为null,如果它被认为是空的。检查基于要验证的属性列表进行。
如果禁用了严格模式(默认),则null和空字符串都被视为空。
如果启用了严格模式,则仅null被视为空。
<?php use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\FormBuilderInterface; use Imatic\Bundle\FormBundle\Form\DataTransformer\EmptyEntityToNullTransformer; /** * Address type */ class AddressType extends AbstractType { /** * @param FormBuilderInterface $builder * @param array $options */ public function buildForm(FormBuilderInterface $builder, array $options) { $builder ->add('street') ->add('number') ->add('city') ->add('postalCode', 'text') ; $builder->addModelTransformer(new EmptyEntityToNullTransformer( array_keys($builder->all()) )); } // ... }