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

编辑该页面

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

表单组件可以猜一个表单字段的类型和一些选项使用类型的猜测。组件已包括一种猜测者使用断言验证组件,但你也可以添加您自己的自定义类型的猜测。

ob娱乐下载Symfony也提供了一些表单类型桥梁的猜测:

创建一个PHPDoc类型猜测者

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

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

首先创建类和这些方法。接下来,您将了解如何填满每一个:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21日22日23日24日25
/ / src /形式/ TypeGuesser / PHPDocTypeGuesser.php名称空间应用程序\形式\TypeGuesser;使用ob娱乐下载\组件\形式\FormTypeGuesserInterface;使用ob娱乐下载\组件\形式\猜一猜\TypeGuess;使用ob娱乐下载\组件\形式\猜一猜\ValueGuess;PHPDocTypeGuesser实现了FormTypeGuesserInterface{公共函数guessType(字符串美元、字符串美元财产):哦?TypeGuess{}公共函数guessRequired(字符串美元、字符串美元财产):哦?ValueGuess{}公共函数guessMaxLength(字符串美元、字符串美元财产):哦?ValueGuess{}公共函数guessPattern(字符串美元、字符串美元财产):哦?ValueGuess{}}

猜测的类型

猜一个类型时,方法返回的一个实例TypeGuess或不确定类型猜测者不能猜类型。

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

  • 类型名称(之一表单类型);
  • 附加选项(例如,当类型实体,您还需要设置选项)。如果没有类型是猜到了,这应该被设置为一个空数组;
  • 信心,猜类型是正确的。这可以是一个常量猜一猜类:LOW_CONFIDENCE,MEDIUM_CONFIDENCE,HIGH_CONFIDENCE,VERY_HIGH_CONFIDENCE。毕竟类型猜测已经执行,使用最高的信心。

有了这些知识,你可以实现的guessType ()的方法PHPDocTypeGuesser:

1 2 3 4 5 6 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
/ / src /形式/ TypeGuesser / PHPDocTypeGuesser.php名称空间应用程序\形式\TypeGuesser;使用ob娱乐下载\组件\形式\扩展\核心\类型\CheckboxType;使用ob娱乐下载\组件\形式\扩展\核心\类型\IntegerType;使用ob娱乐下载\组件\形式\扩展\核心\类型\NumberType;使用ob娱乐下载\组件\形式\扩展\核心\类型\TextType;使用ob娱乐下载\组件\形式\猜一猜\猜一猜;使用ob娱乐下载\组件\形式\猜一猜\TypeGuess;PHPDocTypeGuesser实现了FormTypeGuesserInterface{公共函数guessType(字符串美元、字符串美元财产):哦?TypeGuess{美元注释=美元- >readPhpDocAnnotations (美元,美元财产);如果(!收取(美元注释(“var”))){返回;/ /想什么如果@var注释不可用}/ /否则,基地在@var注释类型返回匹配(美元注释(“var”){/ /有一个高的类型是文本时的信心/ /使用@var字符串“字符串”= >TypeGuess (TextType::类,[],你猜::HIGH_CONFIDENCE),/ /整数也可以是一个实体的id或复选框(0或1)“int”,“整数”= >TypeGuess (IntegerType::类,[],你猜::MEDIUM_CONFIDENCE),“浮”,“双”,“真实”的= >TypeGuess (NumberType::类,[],你猜::MEDIUM_CONFIDENCE),“布尔”,“bool”= >TypeGuess (CheckboxType::类,[],你猜::HIGH_CONFIDENCE),/ /有一个非常低的信心,这一个是正确的默认的= >TypeGuess (TextType::类,[],你猜::LOW_CONFIDENCE)};}受保护的函数readPhpDocAnnotations(字符串美元、字符串美元财产):数组{美元reflectionProperty=\ ReflectionProperty (美元,美元财产);美元phpdoc=美元reflectionProperty- >getDocComment ();/ / $ phpdoc解析成一个数组:/ / (“var”= >“字符串”,“自”= >“1.0”)美元phpdocTags=……;返回美元phpdocTags;}/ /……}

这种猜测者现在可以猜的字段类型属性如果PHPDoc !

猜测字段选项

其他三种方法(guessMaxLength (),guessRequired ()guessPattern ())返回一个ValueGuess实例的价值选择。该构造函数有两个参数:

  • 的价值选择;
  • 猜的信心值是正确的(使用的常量猜一猜类)。

猜是当你相信的价值不应设置的选项。

谨慎

你应该非常小心使用guessPattern ()方法。类型是一个浮动的时候,你不能使用它来确定浮动的最大或最小值(例如,你想要一个大于浮动5,4.512313是无效的,但长度(4.512314)> (5)是,所以模式会成功)。在这种情况下,应该设置为值与一个MEDIUM_CONFIDENCE

注册一个类型猜测者

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

如果你使用自动装配和autoconfigure,手动注册你的服务并标记它form.type_guesser:

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

如果你使用表单组件独立在PHP项目,使用addTypeGuesser ()addTypeGuessers ()FormFactoryBuilder注册新类型猜测:

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

提示

运行以下命令来验证表单类型猜测者成功注册的应用程序:

1
美元php bin /控制台调试:形式
这项工作,包括代码示例,许可下Creative Commons冲锋队3.0许可证。
ob娱乐下载Symfony 6.2支持通过苏禄人
ob娱乐下载Symfony 6.2支持通过Les-Tilleuls.coop