创建一个自定义类型猜测器

编辑本页

警告:您正在浏览的文档欧宝官网下载appob娱乐下载Symfony 4.3,现已不再维护。

本页的更新版本用于Syob娱乐下载mfony 6.2(当前稳定版本)。

创建一个自定义类型猜测器

Form组件可以通过使用类型猜测器来猜测表单字段的类型和一些选项。该组件已经包含了使用Validation组件断言的类型猜测器,但是您还可以添加自己的自定义类型猜测器。

ob娱乐下载Symfony还在桥接中提供了一些表单类型猜测:

创建一个PHPDoc类型猜测器

在本节中,您将构建一个猜测器,从属性的PHPDoc中读取有关字段的信息。首先,您需要创建一个实现FormTypeGuesserInterface.该接口需要四个方法:

guessType ()
尝试猜测字段的类型;
guessRequired ()
的值要求选择;
guessMaxLength ()
的值最大长度输入属性;
guessPattern ()
的值模式输入属性。

首先创建类和这些方法。接下来,你将学习如何填写每一个:

12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
/ / src /形式/ TypeGuesser / PHPDocTypeGuesser.php名称空间应用程序形式TypeGuesser使用ob娱乐下载组件形式FormTypeGuesserInterfacePHPDocTypeGuesser实现了FormTypeGuesserInterface公共函数guessType财产{}公共函数guessRequired财产{}公共函数guessMaxLength财产{}公共函数guessPattern财产{}}

猜类型

的实例时,该方法返回TypeGuess或者什么都没有,以确定类型猜测器不能猜测类型。

TypeGuess构造函数需要三个选项:

  • 类型名称(类型之一表单类型);
  • 其他选项(例如,当类型为实体,你也要设置选项)。如果没有猜到类型,则应将其设置为空数组;
  • 猜测类型是正确的置信度。这可以是其中一个常数猜一猜类:LOW_CONFIDENCEMEDIUM_CONFIDENCEHIGH_CONFIDENCEVERY_HIGH_CONFIDENCE.在执行了所有类型猜测之后,将使用置信度最高的类型。

有了这些知识,您就可以实现guessType ()方法PHPDocTypeGuesser

12 34 56 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
名称空间应用程序形式TypeGuesser使用ob娱乐下载组件形式扩展核心类型CheckboxType使用ob娱乐下载组件形式扩展核心类型IntegerType使用ob娱乐下载组件形式扩展核心类型NumberType使用ob娱乐下载组件形式扩展核心类型TextType使用ob娱乐下载组件形式猜一猜猜一猜使用ob娱乐下载组件形式猜一猜TypeGuessPHPDocTypeGuesser实现了FormTypeGuesserInterface公共函数guessType财产注释->readPhpDocAnnotations (财产);如果(!收取注释“var”))) {返回//如果@var注释不可用,什么也不猜//否则,基于@var注释的类型开关注释“var”) {情况下“字符串”//有一个很高的置信度,类型是文本时// @var字符串返回TypeGuess (TextType::类,[],猜::HIGH_CONFIDENCE);情况下“int”情况下“整数”//整数也可以是实体的id或复选框(0或1)返回TypeGuess (IntegerType::类,[],猜::MEDIUM_CONFIDENCE);情况下“浮”情况下“双”情况下“真实”的返回TypeGuess (NumberType::类,[],猜::MEDIUM_CONFIDENCE);情况下“布尔”情况下“bool”返回TypeGuess (CheckboxType::类,[],猜::HIGH_CONFIDENCE);默认的//有一个非常低的信心,这个是正确的返回TypeGuess (TextType::类,[],猜::LOW_CONFIDENCE);}}受保护的函数readPhpDocAnnotations财产reflectionProperty\ ReflectionProperty (财产);phpdocreflectionProperty->getDocComment ();//将$phpdoc解析为如下数组:// ['var' => 'string', 'since' => '1.0']phpdocTags=……;返回phpdocTags;}/ /……

这个类型猜测器现在可以猜测属性的字段类型,如果它有PHPDoc!

猜测字段选项

其他三种方法(guessMaxLength ()guessRequired ()而且guessPattern ())返回ValueGuess实例使用该选项的值。这个构造函数有两个参数:

  • 期权的价值;
  • 方法的常量,对猜测值是正确的置信度猜一猜类)。

当您认为不应该设置选项的值时,就会猜测。

谨慎

你应该非常小心地使用guessPattern ()方法。当类型为浮点数时,不能使用它来确定浮点数的最小值或最大值(例如,您希望浮点数大于54.512313是无效的长度(4.512314)>长度(5)是,因此该模式将成功)。在这种情况下,值应该设置为与一个MEDIUM_CONFIDENCE

注册一个类型猜测器

如果你在使用自动装配而且可以使用autoconfigure,你完蛋了!ob娱乐下载Symfony已经知道并且正在使用您的表单类型猜测器。

如果你使用自动连接和自动配置,手动注册您的服务并标记它form.type_guesser

  • YAML
  • XML
  • PHP
1 2 3 4 5 6
#配置/ services.yaml服务:#……应用\ \ TypeGuesser \ PHPDocTypeGuesser形式:标签:(form.type_guesser)

如果在PHP项目中单独使用Form组件,请使用addTypeGuesser ()addTypeGuessers ()FormFactoryBuilder注册新的类型猜测者:

1 2 3 4 5 6 7 8 9
使用Acme形式PHPDocTypeGuesser使用ob娱乐下载组件形式形式formFactory=形式::createFormFactoryBuilder ()/ /……->addTypeGuesser (PHPDocTypeGuesser ())->getFormFactory ();/ /……

提示

运行以下命令,验证表单类型猜测器是否成功注册到应用程序中:

1
PHP bin/控制台调试:表单
此工作,包括代码示例,是根据创作共用BY-SA 3.0许可证。