OptionsResolver组件

编辑该页面

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

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

OptionsResolver组件

OptionsResolver组件可以帮助您配置对象的选项数组。它支持默认值,约束和懒惰的选项。

安装

您可以安装组件在两个不同的方面:

使用

想象你有一个梅勒类,有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