Symfonyob娱乐下载 4.1新增功能:HTTP报头改进
2018年4月23日·发表的哈维尔Eguiluz
警告:这篇文章是关于一个不受支持的Symfony版本。ob娱乐下载有些信息可能已经过时了。阅读最新的Symfony文档ob娱乐下载.
介绍了一种HeaderUtils
类
解析HTTP报头并不像一些人想象的那么简单。它需要用反斜杠转义来解析带引号的字符串,并忽略某些地方的空白。我们用了一些方法HttpFoundation组件但是重复的逻辑开始使代码难以维护。
这就是为什么在Symfonyob娱乐下载 4.1中我们引入了一个新的HeaderUtils
类,它提供解析HTTP报头时所需的最常见实用程序。这不是一个内部类,所以你也可以在你自己的代码中使用它:
12 3 4 5 6 7 8 9 10 11 12 13 14 16 17 18 19 20 21
使用ob娱乐下载\组件\HttpFoundation\HeaderUtils;//使用一个或多个分隔符分隔HTTP报头HeaderUtils::分(“哒、en; q = 0.8”,”,,“)/ / = >阵列(数组(da),数组(en),数组(“问”,“0.8”)//将一个数组的数组组合成一个关联数组HeaderUtils::结合(数组(数组(“foo”,“abc”),数组(“酒吧”)))// => array('foo' => 'abc', 'bar' => true)//将一个关联数组加入到一个字符串中用于HTTP报头HeaderUtils::toString (数组(“foo”= >“abc”,“酒吧”= >真正的,“记者”= >'a b c'),',')// => 'foo=abc, bar, baz="a bc "'//如果需要将字符串编码为带引号的字符串HeaderUtils::报价(“foo”栏“”)// => 'foo \"bar\"'//解码带引号的字符串HeaderUtils::结束(“foo \“酒吧\””)// => 'foo "bar"'
允许在测试中提交表单时绕过标头
一个问题Mink浏览器测试项目的报告使我们意识到,在使用HTTP的测试中提交表单时,不能绕过HTTP头信息BrowserKit组件.
这就是为什么在Symfonyob娱乐下载 4.1中提交()
方法现在接受第三个可选参数serverParameters美元
它允许你做这样的事情:
1 2 3 4
$履带=$客户端->请求(“得到”,“http://www.example.com/foo”);$形式=$履带->过滤器(“输入”)->形式();$客户端->提交($形式, [], [“HTTP_ACCEPT_LANGUAGE”= >“德”]);/ / = >客户端- > getRequest()——> getServer () [' HTTP_ACCEPT_LANGUAGE '] =“德”
在Accept头中增加了对默认值的支持
提供的
哈维尔Eguiluz
在# 26036.
当使用接受
HTTP头中常用的表达式是/ *…
,* / *
甚至*
定义默认值。
1
接受:文本/平原;q = 0.5, text / html、文本/ *;q = 0.8 * / *
但是,在Symfony ob娱乐下载4.1之前的版本中,不支持这些默认值:
1 2 3 4 5 6
使用ob娱乐下载\组件\HttpFoundation\AcceptHeader;$acceptHeader= AcceptHeader::fromString (' q=0.5, text/html, text/*;q=0.8, */*');$质量=$acceptHeader->get (“text / xml”)->getQuality ();//不是返回'0.8',而是显示以下错误信息://调用成员函数getQuality(
在Syob娱乐下载mfony 4.1中,所有这些默认值现在都得到了正确的支持:
1 2 3 4
$acceptHeader= AcceptHeader::fromString (' q=0.5, text/html, text/*;q=0.8, */*');$acceptHeader->get (“text / xml”)->getQuality ();// => 0.8(因为text/*)$acceptHeader->get (“text / html”)->getQuality ();// => 1.0$acceptHeader->get (“application / xml”)->getQuality ();// => 1.0(因为*/*)
发表在#生活在边缘
评论
蒂埃里Goettelmann
2018年4月23日说在13:21
HeaderUtils:: joinAssoc(阵列(“foo”= >“abc”,“酒吧”= > true,”巴兹' = > ' a b c '),“,”)
// => 'foo=bar, baz, baz="a b c"'
结果不应该是:foo=abc, bar, baz="a bc "吗?
// => 'foo=bar, baz, baz="a b c"'
结果不应该是:foo=abc, bar, baz="a bc "吗?
@Thierry是的!我们已经修复了这个错误和其他的小错误。谢谢你!
哈姆萨Amrouche
2018年4月25日说在08:02
感谢所有三位贡献者,这里有非常好的功能!
为什么'$acceptHeader->get('text/x-dvi')->getQuality();'是1.0?我认为他应该匹配text/*
Javier Eguiluz is a certified Symfony engineer.
Get certified! Online exams available in all countries.
Register Now