OptionsResolver组件
编辑该页面警告:你浏览的文档欧宝官网下载appob娱乐下载Symfony 2.1,不再维护。
读这个页面的更新版本Symfob娱乐下载ony 6.2(当前的稳定版本)。
OptionsResolver组件
OptionsResolver组件可以帮助您配置对象的选项数组。它支持默认值,约束和懒惰的选项。
安装
您可以安装组件在两个不同的方面:
- 使用官方的Git存储库(https://github.com/ob娱乐下载symfony/OptionsResolver
- 安装它通过作曲家(
ob娱乐下载symfony / options-resolver
在Packagist)
使用
想象你有一个梅勒
类,有2个选项:主机
和密码
。这些选项将由OptionsResolver组件。
首先,创建一个梅勒
类:
1 2 3 4 5 6 7 8
类梅勒{受保护的美元选项;公共函数__construct(数组美元选项=数组()){}}
当然你可以设置选择美元
直接在属性值。相反,使用OptionsResolver通过调用类,并让它解决选项解决()。这样做的优势将更加明显,你继续:
1 2 3 4 5 6 7 8 9
使用ob娱乐下载\组件\OptionsResolver\OptionsResolver;/ /……公共函数__construct(数组美元选项=数组()){美元解析器=新OptionsResolver ();美元这- >选择=美元解析器- >解决(美元选项);}
的选择美元
属性的一个实例选项,它实现ArrayAccess,迭代器和可数名词。这意味着你可以处理它就像一个正常的数组:
1 2 3 4 5 6 7 8 9 10
/ /……公共函数getHost(){返回美元这- >选项(“主机”];}公共函数getPassword(){返回美元这- >选项(“密码”];}
配置OptionsResolver
现在,尝试使用类:
1 2 3 4 5 6
美元梅勒=新梅勒(数组(“主机”= >“smtp.example.org”,“密码”= >“爸爸$ $词”));回声美元梅勒- >getPassword ();
现在,您将收到
InvalidOptionsException告诉你的选项主机
和密码
不存在。这是因为你需要配置OptionsResolver
首先,所以它知道哪些选项应该是解决了。
提示
检查是否存在一个选项,您可以使用称为()函数。
一个最佳实践是将配置在一个方法中(如。setDefaultOptions
)。你在构造函数中调用这个方法来配置的OptionsResolver
类:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
使用ob娱乐下载\组件\OptionsResolver\OptionsResolver;使用ob娱乐下载\组件\OptionsResolver\OptionsResolverInterface;类梅勒{受保护的美元选项;公共函数__construct(数组美元选项=数组()){美元解析器=新OptionsResolver ();美元这- >setDefaultOptions (美元解析器);美元这- >选择=美元解析器- >解决(美元选项);}受保护的函数setDefaultOptions(OptionsResolverInterface美元解析器){/ /……配置解析器,您将学习在下面的部分}}
需要选择
的主机
选项是必需的:类的工作不能没有它。你可以设置通过调用所需的选项setRequired ():
1 2 3 4 5
/ /……受保护的函数setDefaultOptions(OptionsResolverInterface美元解析器){美元解析器- >setRequired (数组(“主机”));}
您现在可以使用类没有错误:
1 2 3 4 5
美元梅勒=新梅勒(数组(“主机”= >“smtp.example.org”));回声美元梅勒- >getHost ();/ / ' smtp.example.org '
如果你不通过需要选择,MissingOptionsException将抛出。
可以确定一个选项是必需的,你可以使用isRequired ()方法。
可选选项
有时,一个选项可以是可选的(例如密码
选项梅勒
类)。这些选项可以配置通过调用setOptional ():
1 2 3 4 5 6 7
/ /……受保护的函数setDefaultOptions(OptionsResolverInterface美元解析器){/ /……美元解析器- >setOptional (数组(“密码”));}
设置默认值
大部分的可选的选项有一个默认值。这些选项可以配置通过调用setDefaults ():
1 2 3 4 5 6 7 8 9
/ /……受保护的函数setDefaultOptions(OptionsResolverInterface美元解析器){/ /……美元解析器- >setDefaults (数组(“用户名”= >“根”));}
这将增加第三个选项-用户名
,给它一个默认值根
。如果用户传入用户名
选择,这个默认值将覆盖。你不需要配置用户名
作为一个可选的选项。的OptionsResolver
已经知道选择一个默认值是可选的。
的OptionsResolver
组件也有一个replaceDefaults ()方法。这可以用来覆盖前面的默认值。闭包传递两个参数:
选择美元
(一个选项实例),所有默认选项美元的价值
,前面的设置默认值
依赖于另一个选项的默认值
假设您添加一个港口
可以选择的梅勒
类的默认值基于主机的你猜。您可以轻松地通过使用一个闭包作为默认值:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
使用ob娱乐下载\组件\OptionsResolver\选项;使用ob娱乐下载\组件\OptionsResolver\OptionsResolverInterface;/ /……受保护的函数setDefaultOptions(OptionsResolverInterface美元解析器){/ /……美元解析器- >setDefaults (数组(“端口”= >函数(选项美元选项){如果(in_array (美元选项(“主机”),数组(“127.0.0.1”,“localhost”))){返回80年;}返回25;}));}
谨慎
第一个参数必须typehinted关闭选项
,否则被认为是值。
配置允许的值
并不是所有的值都是有效的选项的值。假设梅勒
类都有一个运输
选项,它只能是一个sendmail
,邮件
或smtp
。您可以配置这些允许的值通过调用setAllowedValues ():
1 2 3 4 5 6 7 8 9
/ /……受保护的函数setDefaultOptions(OptionsResolverInterface