如何创建一个定制的数据收集器

编辑该页面

警告:你浏览的文档欧宝体育电话欧宝娱乐app下载地址Symfony 4.1,不再维护。

这个页面的更新版本Symf欧宝娱乐app下载地址ony 6.2(当前的稳定版本)。

如何创建一个定制的数据收集器

欧宝娱乐app下载地址Symfony分析器获得它的分析和调试信息使用一些特殊的类称为数据收集器。欧宝娱乐app下载地址与其中一些Symfony捆绑在一起,但你也可以创建你自己的。

创建一个定制的数据收集器

一个数据收集器是一个PHP类,它实现了DataCollectorInterface。为了方便起见,您的数据收集器也可以延长的DataCollector类,它实现了接口和提供了一些实用程序$ this - >数据属性存储收集到的信息。

下面的示例显示了一个定制的收集器,它存储的信息要求:

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
/ / src / DataCollector / RequestCollector.php<跨度类="hljs-keyword">名称空间<跨度类="hljs-title">应用程序\<跨度类="hljs-title">DataCollector;<跨度类="hljs-keyword">使用<跨度类="hljs-title">欧宝娱乐app下载地址\<跨度类="hljs-title">组件\<跨度类="hljs-title">HttpKernel\<跨度类="hljs-title">DataCollector\<跨度类="hljs-title">DataCollector;<跨度类="hljs-keyword">使用<跨度类="hljs-title">欧宝娱乐app下载地址\<跨度类="hljs-title">组件\<跨度类="hljs-title">HttpFoundation\<跨度类="hljs-title">请求;<跨度类="hljs-keyword">使用<跨度类="hljs-title">欧宝娱乐app下载地址\<跨度类="hljs-title">组件\<跨度类="hljs-title">HttpFoundation\<跨度类="hljs-title">响应;<跨度类="hljs-class"><跨度类="hljs-title">RequestCollector<跨度类="hljs-keyword">扩展<跨度类="hljs-title">DataCollector< /跨度>{<跨度类="hljs-keyword">公共<跨度类="hljs-function">函数<跨度类="hljs-title">收集<跨度类="hljs-params">(请求<跨度类="hljs-variable">美元请求、响应<跨度类="hljs-variable">美元响应,\例外<跨度类="hljs-variable">美元异常= null)< /跨度>{<跨度类="hljs-variable">美元<跨度类="hljs-operator">- >data = (<跨度类="hljs-string">“方法”=><跨度类="hljs-variable">美元请求<跨度类="hljs-operator">- >getMethod(),<跨度类="hljs-string">“acceptable_content_types”=><跨度类="hljs-variable">美元请求<跨度类="hljs-operator">- >getAcceptableContentTypes()];}<跨度类="hljs-keyword">公共<跨度类="hljs-function">函数<跨度类="hljs-title">重置<跨度类="hljs-params">()< /跨度>{<跨度类="hljs-variable">美元<跨度类="hljs-operator">- >数据= [];}<跨度类="hljs-keyword">公共<跨度类="hljs-function">函数<跨度类="hljs-title">getName<跨度类="hljs-params">()< /跨度>{<跨度类="hljs-keyword">返回<跨度类="hljs-string">“app.request_collector”;}<跨度类="hljs-comment">/ /……}
收集()方法:

将收集到的数据存储在本地属性($ this - >数据如果你从DataCollector)。如果数据收集不能通过请求或响应,注入所需的服务的数据收集器。

谨慎< /p>

收集()方法只调用一次。它不是用来“收集”数据但有“捡”已经被你的服务存储的数据。

谨慎< /p>

分析器实例序列化数据收集器,您不应该存储对象不能被序列化(如PDO对象)或需要提供你自己的serialize ()方法。

重置()方法:
它叫做请求之间重置分析器的状态。用它来删除所有的信息收集收集()方法。
getName ()方法:
返回收集器标识符,在应用程序中必须是惟一的。使用这个值后进入收集器(见信息如何使用分析器功能测试)所以建议返回一个字符串短,小写的,没有空格。

启用自定义数据收集器

如果你使用默认的服务。yaml的配置可以使用autoconfigure,那么Symf欧宝娱乐app下载地址ony会自动看到你的新数据收集器!你的收集()方法应该调用下次你刷新。

如果你不使用可以使用autoconfigure,你也可以手动线你的服务标签它与data_collector

添加网络分析器模板

你的数据收集器收集的信息可以显示在web调试工具栏和网络分析器。要做到这一点,您需要创建一个树枝模板,包括一些特定的块。

不过,首先你必须添加一些数据收集器类getter给模板访问收集到的信息:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
/ / src / DataCollector / RequestCollector.php<跨度类="hljs-keyword">名称空间<跨度类="hljs-title">应用程序\<跨度类="hljs-title">DataCollector;<跨度类="hljs-keyword">使用<跨度类="hljs-title">欧宝娱乐app下载地址\<跨度类="hljs-title">组件\<跨度类="hljs-title">HttpKernel\<跨度类="hljs-title">DataCollector\<跨度类="hljs-title">DataCollector;<跨度类="hljs-class"><跨度类="hljs-title">RequestCollector<跨度类="hljs-keyword">扩展<跨度类="hljs-title">DataCollector< /跨度>{<跨度类="hljs-comment">/ /……<跨度类="hljs-keyword">公共<跨度类="hljs-function">函数<跨度类="hljs-title">getMethod<跨度类="hljs-params">()< /跨度>{<跨度类="hljs-keyword">返回<跨度类="hljs-variable">美元<跨度类="hljs-operator">- >数据(<跨度类="hljs-string">“方法”];}<跨度类="hljs-keyword">公共<跨度类="hljs-function">函数<跨度类="hljs-title">getAcceptableContentTypes<跨度类="hljs-params">()< /跨度>{<跨度类="hljs-keyword">返回<跨度类="hljs-variable">美元<跨度类="hljs-operator">- >数据(<跨度类="hljs-string">“acceptable_content_types”];}}

在最简单的情况下,您想要显示工具栏中的信息没有提供一个分析器面板。这需要定义工具栏块,设置两个变量的值图标文本:

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
{%<跨度类="hljs-name">扩展< /跨度>“@WebProfiler /分析器/ layout.html。嫩枝' %}<跨度类="xml">{%<跨度类="hljs-name">< /跨度>工具栏%}<跨度类="xml">{%<跨度类="hljs-name">< /跨度>图标%}<跨度类="xml">{#这是工具栏中的内容显示为一组#}<跨度类="xml"><<跨度类="hljs-name">svg<跨度类="hljs-attr">xmlns=<跨度类="hljs-string">“http://www.w3.org/2000/svg”>…<跨度类="hljs-tag">< /<跨度类="hljs-name">svg><跨度类="hljs-tag"><<跨度类="hljs-name">跨度<跨度类="hljs-attr">类=<跨度类="hljs-string">“sf-toolbar-value”>请求<跨度类="hljs-tag">< /<跨度类="hljs-name">跨度>< /跨度><跨度类="hljs-template-tag">{%<跨度类="hljs-name">endset< /跨度>%}<跨度类="xml">{%<跨度类="hljs-name">< /跨度>文本%}<跨度类="xml">{#这是当鼠标悬停在工具栏显示的内容面板#}<跨度类="xml"><<跨度类="hljs-name">div<跨度类="hljs-attr">类=<跨度类="hljs-string">“sf-toolbar-info-piece”><跨度类="hljs-tag"><<跨度类="hljs-name">b>方法<跨度类="hljs-tag">< /<跨度类="hljs-name">b><跨度类="hljs-tag"><<跨度类="hljs-name">跨度>< /跨度><跨度类="hljs-template-variable">{{收集器。方法}}<跨度类="xml">< /<跨度类="hljs-name">跨度><跨度类="hljs-tag">< /<跨度类="hljs-name">div><跨度类="hljs-tag"><<跨度类="hljs-name">div<跨度类="hljs-attr">类=<跨度类="hljs-string">“sf-toolbar-info-piece”><跨度类="hljs-tag"><<跨度类="hljs-name">b>接受的内容类型<跨度类="hljs-tag">< /<跨度类="hljs-name">b><跨度类="hljs-tag"><<跨度类="hljs-name">跨度>< /跨度><跨度类="hljs-template-variable">{{collector.acceptableContentTypes |<跨度类="hljs-keyword">加入(" ")}}<跨度类="xml">< /<跨度类="hljs-name">跨度><跨度类="hljs-tag">< /<跨度类="hljs-name">div>< /跨度><跨度类="hljs-template-tag">{%<跨度类="hljs-name">endset< /跨度>%}<跨度类="xml">{#“链接”值设置为“假”意味着这个面板不显示网页分析器部分#}<跨度类="xml">{{<跨度类="hljs-name">包括<跨度类="hljs-params">(“@WebProfiler /分析器/ toolbar_item.html。嫩枝”,{链接:假})}}<跨度类="xml">{%<跨度类="hljs-name">endblock< /跨度>%}< /code>

提示< /p>

内置收集器模板定义所有的图像嵌入SVG文件。这使得它们到处工作,无需网络资产链接:

1 2 3 4
{%<跨度类="hljs-name">< /跨度>图标%}<跨度类="xml">{{<跨度类="hljs-name">包括<跨度类="hljs-params">(“data_collector / icon.svg”)}}<跨度类="xml">{#……#}<跨度类="xml">{%<跨度类="hljs-name">endset< /跨度>%}< /code>

如果工具栏面板包含扩展网络分析器信息,树枝模板还必须定义额外的模块:

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
{%<跨度类="hljs-name">扩展< /跨度>“@WebProfiler /分析器/ layout.html。嫩枝' %}<跨度类="xml">{%<跨度类="hljs-name">< /跨度>工具栏%}<跨度类="xml">{%<跨度类="hljs-name">< /跨度>图标%}<跨度类="xml">{#……#}<跨度类="xml">{%<跨度类="hljs-name">endset< /跨度>%}<跨度类="xml">{%<跨度类="hljs-name">< /跨度>文本%}<跨度类="xml"><<跨度类="hljs-name">div<跨度类="hljs-attr">类=<跨度类="hljs-string">“sf-toolbar-info-piece”>< /跨度><跨度类="hljs-comment">{#……#}<跨度类="xml">< /<跨度类="hljs-name">div>< /跨度><跨度类="hljs-template-tag">{%<跨度类="hljs-name">endset< /跨度>%}<跨度类="xml">{{<跨度类="hljs-name">包括<跨度类="hljs-params">(“@WebProfiler /分析器/ toolbar_item.html。嫩枝”,{“链接”:真})}}<跨度类="xml">{%<跨度类="hljs-name">endblock< /跨度>%}<跨度类="xml">{%<跨度类="hljs-name">< /跨度>头%}<跨度类="xml">{#可选的。在这里您可以链接或定义自己的CSS和javascript的内容。#}<跨度类="xml">{#使用{父(){}}扩展默认样式,而不是覆盖它们。#}<跨度类="xml">{%<跨度类="hljs-name">endblock< /跨度>%}<跨度类="xml">{%<跨度类="hljs-name">< /跨度>菜单%}<跨度类="xml">{#这个左菜单出现在使用全屏分析器。#}<跨度类="xml"><<跨度类="hljs-name">跨度<跨度类="hljs-attr">类=<跨度类="hljs-string">“标签”><跨度类="hljs-tag"><<跨度类="hljs-name">跨度<跨度类="hljs-attr">类=<跨度类="hljs-string">“图标”><跨度类="hljs-tag"><<跨度类="hljs-name">img<跨度类="hljs-attr">src=<跨度类="hljs-string">“…”<跨度类="hljs-attr">alt=<跨度类="hljs-string">”“/ ><跨度类="hljs-tag">< /<跨度类="hljs-name">跨度><跨度类="hljs-tag"><<跨度类="hljs-name">强大的>请求<跨度类="hljs-tag">< /<跨度类="hljs-name">强大的><跨度类="hljs-tag">< /<跨度类="hljs-name">跨度>< /跨度><跨度类="hljs-template-tag">{%<跨度类="hljs-name">endblock< /跨度>%}<跨度类="xml">{%<跨度类="hljs-name">< /跨度>面板%}<跨度类="xml">{#可选,显示大部分细节。#}<跨度类="xml"><<跨度类="hljs-name">h2>可接受的内容类型<跨度类="hljs-tag">< /<跨度类="hljs-name">h2><跨度类="hljs-tag"><<跨度类="hljs-name">表><跨度类="hljs-tag"><<跨度类="hljs-name">tr><跨度类="hljs-tag"><<跨度类="hljs-name">th>内容类型<跨度类="hljs-tag">< /<跨度类="hljs-name">th><跨度类="hljs-tag">< /<跨度类="hljs-name">tr>< /跨度><跨度类="hljs-template-tag">{%<跨度类="hljs-name">< /跨度>输入收集器。acceptableContentTypes %}<跨度类="xml"><<跨度类="hljs-name">tr><跨度类="hljs-tag"><<跨度类="hljs-name">道明>< /跨度><跨度类="hljs-template-variable">{{类型}}<跨度类="xml">< /<跨度类="hljs-name">道明><跨度类="hljs-tag">< /<跨度类="hljs-name">tr>< /跨度><跨度类="hljs-template-tag">{%<跨度类="hljs-name">endfor< /跨度>%}<跨度类="xml">< /<跨度类="hljs-name">表>< /跨度><跨度类="hljs-template-tag">{%<跨度类="hljs-name">endblock< /跨度>%}< /code>

菜单面板阻塞是唯一需要定义相关的内容显示在网页分析器面板数据收集器。所有的块都有访问收集器对象。

最后,为了使数据收集器模板,覆盖你的服务配置指定一个包含模板标签:

  • YAML< /li>
  • XML< /li>
  • PHP< /li>
1 2 3 4 5 6 7 8 9 10 11 12
#配置/ services.yaml<跨度类="hljs-attr">服务:<跨度类="hljs-string">App \ DataCollector \ RequestCollector:<跨度类="hljs-attr">标签:<跨度类="hljs-bullet">- - - - - -<跨度类="hljs-attr">名称:<跨度类="hljs-string">data_collector<跨度类="hljs-attr">模板:<跨度类="hljs-string">“data_collector / template.html.twig”<跨度类="hljs-comment">#必须匹配getName()方法返回的值<跨度类="hljs-attr">id:<跨度类="hljs-string">“app.request_collector”<跨度类="hljs-comment">#可选的优先级<跨度类="hljs-comment">优先级:300<跨度类="hljs-attr">公众:<跨度类="hljs-literal">假< /code>

每个面板工具栏的位置是由收集器的优先级。优先级被定义为正的或负的整数,默认0。大多数内置收集器使用255年作为他们的优先级。如果你想让你的收集器在他们面前显示,使用更高的值(如300)。

这项工作,包括代码示例,许可下Creative Commons冲锋队3.0许可证。
< /article>