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

编辑该页面

警告:你浏览的文档欧宝官网下载appob娱乐下载Symfony 5.2,不再维护。

这个页面的更新版本Symfob娱乐下载ony 6.2(当前的稳定版本)。

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

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

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 53 54 55 56 57 58 59 60 61
/ / 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);情况下“int”:情况下“整数”:/ /整数也可以是一个实体的id或复选框(0或1)返回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许可证。