善良在Symfony 2.1ob娱乐下载
你们中那些已经升级到Symfony 2.1 Beta可能注意到新版本有很多ob娱乐下载向后兼容组件形式。你们中的很多人可能会问自己:为什么?简单的答案是,表单组件是Symfony中最复杂的组件之一。ob娱乐下载现实生活不仅仅只是这么多形式处理ctype_digit ($ _POST['年龄'])
。这种复杂性是很难得到正确的第一次。当然,这不是一个论点,让你想要升级您的代码的麻烦。相反,我想用这篇文章来突出Symfony 2.1中的所有酷的改变,让你每天编码器的生活多一点快乐。ob娱乐下载
请注意
如果下列代码示例是很难理解,我建议阅读形成文档欧宝官网下载app首先,它能胜任解释必要的基本知识。
不再bindRequest ()¶
该方法bind ()
现在是足够聪明来检查你是否通过一个Symfony吗ob娱乐下载请求
实例或数据提取$ _POST
数组中。你必须使用bindRequest ()
在第一种情况下。如果你不确定我是什么意思,看看这个示例:
1 2 3 4 5 |
/ /之前,您必须调用bindRequest(请求)美元/ /现在你总是可以使用bind ()美元的形式- >绑定(美元的请求);美元的形式- >绑定($ _POST(美元的形式- >getName());
|
这只是一个小小的改进,但希望你也和我一样喜欢它。
自定义字段的约束¶
第二件很酷的事情,我想告诉你的是新的“约束”选项。这个选项被称为“validation_constraint”,但新版本更强大。看看下面这个示例中,去感受它的用法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
使用ob娱乐下载Symfony \组件\ \最小长度验证器\约束;使用ob娱乐下载Symfony \ \ NotBlank组件\验证器\约束;美元的建造者- >添加(“firstName”,“文本”,数组(“约束”= >新最小长度(3),))- >添加(“姓”,“文本”,数组(“约束”= >数组(新NotBlank(),新最小长度(3),),));
|
如您所见,您可以设置的选项对任何领域,通过一个或多个验证这个字段的约束。事实上,创造一种由数组现在是幸福!如果你上面的代码存储在一个PersonType
类,下面的代码是你所需要的过程和验证形式。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
美元的形式=这个美元- >createForm(新PersonType(),数组(“firstName”= >“约翰。”,“姓”= >“韦恩。”,));如果(“职位”= = =美元的请求- >getMethod()){美元的形式- >绑定(美元的请求);如果(美元的形式- >isValid()){/ /做某事以美元形式- > getData()和重定向}}/ /渲染模板
|
如果你的形式是由一个对象,“约束”选项中定义的约束将评估除了中定义的对象的类。
OptionsResolver组件¶
ob娱乐下载Symfony 2.1还附带一个新的组件OptionsResolver大量使用的表单组件。现在可能包含表单类型的方法setDefaultOptions ()
收到一个实例的这样一个“选项解析器”。
但是这个解析器做什么呢?很多伟大的事情。显然还可以设置你的选项的默认值。但是你也可以限制选项的值可能包含或设置数据类型(s)接受的选项。你也可以选择标记为必需的或可选的。可选选项没有默认值,所以他们是一个伟大的方式来找到用户是否设置选项,即使他设置零
。
代码说话超过几千单词,再来一个例子展示这些特点:
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 |
使用ob娱乐下载Symfony \组件\ \ AbstractType形式;使用ob娱乐下载Symfony \组件\ \ FormInterface形式;使用ob娱乐下载Symfony \组件\ \ FormView形式;使用ob娱乐下载Symfony \ \ OptionsResolver \ OptionsResolverInterface组件;类AjaxType扩展AbstractType{公共函数getName(){返回“ajax”;}公共函数setDefaultOptions(OptionsResolverInterface美元的解析器){美元的解析器- >setDefaults(数组(“帮助”= >”,“模式”= >“紧凑”,))- >setRequired(数组(“主题”,))- >setOptional(数组(“ajax_data”,))- >setAllowedTypes(数组(“帮助”= >“字符串”,“主题”= >“Acme \ AjaxBundle \ ThemeInterface”,“ajax_data”= >数组(“零”,“标量”),))- >setAllowedValues(数组(“模式”= >数组(“紧凑”,“宽”),));}公共函数buildView(FormView美元的观点,FormInterface美元的形式,数组选择美元){如果(!array_key_exists(“ajax_data”,选择美元)){/ /选择是没有设置,做点什么……}}}
|
这些选项时可以通过添加一个表单字段的类型:
1 2 3 4 |
美元的建造者- >添加(“标签”,“ajax”,数组(“主题”= >shinyTheme美元,“帮助”= >请输入一个或多个标签,如。“php框架,”,));
|
根据上述定义,解析器现在做以下检查:
- 你不能通过任何无效的选项名称
- 通过选择“主题”
- 选择“帮助”,“主题”和“ajax_data”必须配置的数据类型
- 选择“模式”可能只是一个“紧凑”和“宽”
但OptionsResolver组件允许您做更多。你可以设置默认值的选项取决于其他选项的值。考虑下面的例子:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
使用ob娱乐下载Symfony \ OptionsResolver \ \组件选项;美元的模式=函数(选项选择美元){如果(选择美元(“max_length”]>20.){返回“宽”;}返回“紧凑”;};美元的解析器- >setDefaults(数组(“模式”= >美元的模式,));
|
这段代码设置默认选择“模式”“宽”如果其他选项的值大于20“max_length”。请注意,我们在这里只讨论一个默认值,所以你可以很容易地覆盖默认的“模式”,当你创建表单。
OptionsResolver组件的更多信息,更重要的是如何使用它独立于表单组件中可以找到它自述文件。
傅误差映射¶
ob娱乐下载Symfony 2.0是一个有些“特殊”时验证错误映射到表单的字段。不要担心,因为这已经大大改善了在Symfony 2.1。ob娱乐下载和内置的映射不应该做你想要的,您可以自定义修改“error_mapping”选项。
让我们以以下模型类为例:
1 2 3 4 5 6 7 8 9 10 |
类地址{/ * ** @Assert \真实(消息= "给定的城市与邮编不匹配”)* /公共hasMatchingCityAndZipCode(){/ /做逻辑和返回true或false}}
|
一个自定义的方法在这类验证城市和邮编是否匹配。不幸的是,没有“matchingCityAndZipCode”字段在表单,所以Symfony能为你做的是显示错误的形式。ob娱乐下载自定义错误映射,你可以做得更好:
1 2 3 4 5 6 7 8 9 10 11 |
类AddressType扩展AbstractType{公共函数setDefaultOptions(OptionsResolverInterface美元的解析器){美元的解析器- >setDefaults(数组(“error_mapping”= >数组(“matchingCityAndZipCode”= >“城市”,),));}}
|
现在显示的错误是整齐的“城市”字段。重要的是理解左边和右边的映射:
- 左侧包含属性的路径。如果违反上生成一个类的属性或方法,只是它的路径
propertyName
。如果违反是生成一个数组或一个条目ArrayAccess
对象,属性路径(indexName)
。您可以构建嵌套属性路径通过连接,分离属性点,例如:地址[工作].matchingCityAndZipCode
- 右侧包含简单的表单中字段的名称。
左边的错误映射还接受一个点。
,指领域本身。这意味着任何错误添加到字段添加到给定的嵌套的字段。
1 2 3 4 5 |
美元的解析器- >setDefaults(数组(“error_mapping”= >数组(“。”= >“城市”,),));
|
收集改进¶
的“收集”类型在Symfony 2.0,而无法使用,已经改进了很多,终于能够ob娱乐下载调用类型addXxx ()
和removeXxx ()
模型类中的方法。下面的代码片段说明了这样一个类的一个摘录:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
类文章{公共函数addTag(标签美元的标记){/ /……}公共函数removeTag(标签美元的标记){/ /……}公共函数getTags(){/ /……}}
|
形式的类,您可以添加一个标签集合领域像往常一样:
1 2 3 4 5 |
美元的建造者- >添加(“标签”,“收集”,数组(“类型”= >“文本”,“allow_add”= >真正的,“allow_remove”= >真正的,));
|
当你通过这个字段添加或删除标签,Symfony将调用正确的方法在你的对象。ob娱乐下载如果没有addTag ()
或removeTag ()
找到方法,框架将使用setTags ()
相反或者抛出一个异常,也没有发现。
第二,好的改善收集形式主题的担忧。你可能知道你可以单个元素的形式通过定义块名称等于这些元素的HTML id,由下划线前缀:
{%块_article_tags_widget %}{#自定义HTML #} {% endblock %}
收藏领域的不幸的是,这不是很有用,因为每一行的领域有不同的ID,如_article_tags_0_widget
。这是固定的:现在你可以风格所有行一次通过替换的行索引关键字“条目”:
{%块_article_tags_entry_widget %}{#自定义HTML #} {% endblock %}
请注意
样式不支持个别行通过索引了。这有一个可怕的对性能的影响,不合理的。
HTML5日期和时间标记¶
ob娱乐下载Symfony现在完全支持HTML5规范当您添加“日期”或“datetime”字段表单,并将“部件”选项设置为“single_text”。
1 2 3 |
美元的建造者- >添加(“createdAt”,“日期”,数组(“部件”= >“single_text”,));
|
浏览器支持HTML5能够为这些字段显示本地化后的日期和时间采摘者,条件下,后面的“价值”属性包含一个日期RFC3339标准。ob娱乐下载Symfony现在这是否适合你。如果你不想支持HTML5,您可以添加一个自定义字段“格式”选项:
1 2 3 4 |
美元的建造者- >添加(“createdAt”,“日期”,数组(“部件”= >“single_text”,“格式”= >“dd.MM.yyyy”,));
|
ob娱乐下载Symfony将认识到这种情况下,输出一个常规的“文本”的标签,而不是HTML5变体。
Jean-François Simon is a certified Symfony engineer.
Get certified! Online exams available in all countries.
Register Now