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

编辑该页面

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

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

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

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

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

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

5.2< /p>

AbstractDataCollector类是在Symfony 5.2中引入的。欧宝娱乐app下载地址

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

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
/ / src / DataCollector / RequestCollector.php<跨度类="hljs-keyword">名称空间<跨度类="hljs-title">应用程序\<跨度类="hljs-title">DataCollector;<跨度类="hljs-keyword">使用<跨度类="hljs-title">欧宝娱乐app下载地址\<跨度类="hljs-title">包\<跨度类="hljs-title">FrameworkBundle\<跨度类="hljs-title">DataCollector\<跨度类="hljs-title">AbstractDataCollector;<跨度类="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">AbstractDataCollector< /跨度>{<跨度类="hljs-keyword">公共<跨度类="hljs-function">函数<跨度类="hljs-title">收集<跨度类="hljs-params">(请求<跨度类="hljs-variable">美元请求、响应<跨度类="hljs-variable">美元响应,\Throwable<跨度类="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()];}}

这些方法可以定义数据收集器类:

收集()方法:

将收集到的数据存储在本地属性($ this - >数据如果你从AbstractDataCollector)。如果你需要一些服务来收集数据,数据收集器的构造函数注入这些服务。

谨慎< /p>

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

谨慎< /p>

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

重置()方法:
它叫做请求之间重置分析器的状态。默认情况下只清空$ this - >数据内容,但是您可以覆盖这个方法去做额外的清洁。
getName ()方法:
返回收集器标识符,在应用程序中必须是惟一的。默认情况下它返回数据收集器的FQCN类,但是你可以覆盖这个方法返回一个自定义名称(如。app.request_collector)。使用这个值后进入收集器(见信息如何使用分析器功能测试)你可能更喜欢使用短字符串代替FQCN字符串。

收集()方法被调用时kernel.response事件。如果你只需要收集的数据可用后,实现LateDataCollectorInterface和定义lateCollect ()方法,该方法被调用之前分析器数据序列化(期间kernel.terminate事件)。

请注意< /p>

如果你使用默认的服务。yaml的配置可以使用autoconfigure,那么Symf欧宝娱乐app下载地址ony将开始使用你的下一个页面刷新后数据收集器。否则,使数据收集器

添加网络分析器模板

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

首先,添加getTemplate ()方法在你的数据收集器类返回的路径树枝模板来使用。然后,添加一些getter给模板访问收集到的信息:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21日22日23日24
/ / src / DataCollector / RequestCollector.php<跨度类="hljs-keyword">名称空间<跨度类="hljs-title">应用程序\<跨度类="hljs-title">DataCollector;<跨度类="hljs-keyword">使用<跨度类="hljs-title">欧宝娱乐app下载地址\<跨度类="hljs-title">包\<跨度类="hljs-title">FrameworkBundle\<跨度类="hljs-title">DataCollector\<跨度类="hljs-title">AbstractDataCollector;<跨度类="hljs-class"><跨度类="hljs-title">RequestCollector<跨度类="hljs-keyword">扩展<跨度类="hljs-title">AbstractDataCollector< /跨度>{<跨度类="hljs-comment">/ /……<跨度类="hljs-keyword">公共<跨度类="hljs-keyword">静态<跨度类="hljs-function">函数<跨度类="hljs-title">getTemplate<跨度类="hljs-params">():哦?<跨度类="hljs-title">字符串< /跨度>{<跨度类="hljs-keyword">返回<跨度类="hljs-string">“data_collector / template.html.twig”;}<跨度类="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日28
{/ data_collector / template.html #模板。树枝#}<跨度类="xml">{%<跨度类="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 45
{/ data_collector / template.html #模板。树枝#}<跨度类="xml">{%<跨度类="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>

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

请注意< /p>

每个面板工具栏的位置是由收集器优先级,这只能时定义手工配置数据收集器

请注意< /p>

如果你使用默认的服务。yaml的配置可以使用autoconfigure,然后Symf欧宝娱乐app下载地址ony会显示你的收集器工具栏中的数据后,下一个页面刷新。否则,使数据收集器

启用自定义数据收集器

如果你不使用Symfony的默认配欧宝娱乐app下载地址置自动装配和autoconfigure你需要配置数据收集器明确:

  • 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-comment">#必须匹配getName()方法返回的值<跨度类="hljs-attr">id:<跨度类="hljs-string">“App \ DataCollector \ RequestCollector”<跨度类="hljs-comment">#可选的模板(它的优先级比getTemplate返回的值())<跨度类="hljs-attr">模板:<跨度类="hljs-string">“data_collector / template.html.twig”<跨度类="hljs-comment">#可选的优先级(积极或消极的整数;默认= 0)<跨度类="hljs-comment">优先级:300< /code>
这项工作,包括代码示例,许可下Creative Commons冲锋队3.0许可证。
< /article>