如何创建自定义数据收集器
编辑本页如何创建自定义数据收集器
的ob娱乐下载Symfony分析器使用一些称为数据收集器的特殊类获取其分析和调试信息。ob娱乐下载Symfony附带了其中一些,但您也可以创建自己的。
创建自定义数据收集器
数据收集器是实现DataCollectorInterface.为方便起见,数据收集器还可以从AbstractDataCollector类,它实现接口并提供一些实用程序和$ this - >数据
属性存储收集的信息。
下面的示例显示了一个存储请求信息的自定义收集器:
12 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">ob娱乐下载\<跨度类="hljs-title">包跨度>\<跨度类="hljs-title">FrameworkBundle跨度>\<跨度类="hljs-title">DataCollector跨度>\<跨度类="hljs-title">AbstractDataCollector跨度>;<跨度类="hljs-keyword">使用跨度><跨度类="hljs-title">ob娱乐下载\<跨度类="hljs-title">组件跨度>\<跨度类="hljs-title">HttpFoundation跨度>\<跨度类="hljs-title">请求跨度>;<跨度类="hljs-keyword">使用跨度><跨度类="hljs-title">ob娱乐下载\<跨度类="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">->跨度>数据= [<跨度类="hljs-string">“方法”跨度>=><跨度类="hljs-variable">$跨度>请求跨度><跨度类="hljs-operator">->跨度>getMethod(),<跨度类="hljs-string">“acceptable_content_types”跨度>=><跨度类="hljs-variable">$跨度>请求跨度><跨度类="hljs-operator">->跨度>getAcceptableContentTypes()];}}
这些是你可以在数据收集器类中定义的方法:
- 收集()方法:
-
将收集的数据存储在本地属性中(
$ this - >数据
如果你从AbstractDataCollector
).如果您需要一些服务来收集数据,请将这些服务注入到数据收集器构造函数中。谨慎跨度>
的
收集()
方法只被调用一次。它不是用来“收集”数据,而是用来“拾取”服务存储的数据。谨慎跨度>
由于分析器序列化数据收集器实例,您不应该存储不能序列化的对象(如PDO对象),或者您需要提供自己的对象
serialize ()
方法。 - 重置()方法:
-
在请求之间调用它来重置分析器的状态。默认情况下,它只清空
$ this - >数据
内容,但您可以重写此方法以执行额外的清理。 - getName ()方法:
-
返回收集器标识符,该标识符在应用程序中必须唯一。默认情况下,它返回数据收集器类的FQCN,但您可以重写此方法以返回自定义名称(例如。
app.request_collector
).稍后将使用此值访问收集器信息(请参阅如何在功能测试中使用分析器)所以你可能更喜欢使用短字符串而不是FQCN字符串。
的收集()
方法在kernel.response事件。如果您需要收集以后才可用的数据,请执行LateDataCollectorInterface并定义lateCollect ()
方法,该方法在分析器数据序列化之前被调用kernel.terminate事件)。
请注意跨度>
如果你在用默认的服务。yaml的配置与可以使用autoconfigure
,那么Symfob娱乐下载ony将在下一个页面刷新后开始使用您的数据收集器。否则,手动启用数据采集器.
添加Web分析器模板
数据收集器收集的信息可以显示在web调试工具栏和web分析器中。为此,您需要创建一个包含一些特定块的Twig模板。
首先,添加getTemplate ()
方法返回要使用的Twig模板的路径。然后,添加一些getter给模板访问收集的信息:
12 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">ob娱乐下载\<跨度类="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”跨度>];}}
在最简单的情况下,您希望在工具栏中显示信息,而不提供分析器面板。这需要定义工具栏
块和设置值的两个变量称为图标
而且文本
:
12 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">{# link'值设置为'false'意味着该面板不显示web分析器中的部分#}跨度><跨度类="xml">{{<跨度类="hljs-name">包括跨度><跨度类="hljs-params">(“@WebProfiler /分析器/ toolbar_item.html。Twig ', {link: false})跨度>}}跨度><跨度类="xml">{%<跨度类="hljs-name">endblock跨度>跨度>%}跨度>
提示跨度>
内置收集器模板将所有图像定义为嵌入的SVG文件。这使得他们的工作无处不在,而不必与web资产链接混乱:
1 2 3 4
{%<跨度类="hljs-name">集跨度>跨度>图标%}跨度><跨度类="xml">{{<跨度类="hljs-name">包括跨度><跨度类="hljs-params">(“data_collector / icon.svg”)跨度>}}跨度><跨度类="xml">{#……#}跨度><跨度类="xml">{%<跨度类="hljs-name">endset跨度>跨度>%}跨度>
如果工具栏面板包含扩展的web分析器信息,Twig模板还必须定义额外的块:
12 34 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。Twig ', {'link': true})跨度>}}跨度><跨度类="xml">{%<跨度类="hljs-name">endblock跨度>跨度>%}跨度><跨度类="xml">{%<跨度类="hljs-name">块跨度>跨度>头%}跨度><跨度类="xml">{#可选的。在这里你可以链接到或定义你自己的CSS和JS内容。#}跨度><跨度类="xml">使用{{parent()}}扩展默认样式,而不是覆盖它们。#}跨度><跨度类="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">{{type}}跨度><跨度类="xml"><跨度类="hljs-name">道明跨度>>跨度><跨度类="hljs-tag"><跨度类="hljs-name">tr跨度>>跨度>跨度><跨度类="hljs-template-tag">{%<跨度类="hljs-name">endfor跨度>跨度>%}跨度><跨度类="xml"><跨度类="hljs-name">表格跨度>>跨度>跨度><跨度类="hljs-template-tag">{%<跨度类="hljs-name">endblock跨度>跨度>%}跨度>
的菜单
而且面板
块是定义与此数据收集器关联的web分析器面板中显示的内容所需的唯一块。所有块都可以访问收集器
对象。
请注意跨度>
工具栏中每个面板的位置由收集器优先级决定,该优先级只能在以下情况下定义手动配置数据收集器.
请注意跨度>
如果你在用默认的服务。yaml的配置与可以使用autoconfigure
,那么Symfob娱乐下载ony将开始在工具栏中显示您的收集器数据。否则,手动启用数据采集器.
启用自定义数据收集器
如果您不使用Symfony的默认配ob娱乐下载置自动装配和自动配置你需要显式配置数据收集器:
- YAML跨度>
- XML跨度>
- PHP跨度>
12 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"># optional template(它比getTemplate()返回的值更优先)跨度><跨度类="hljs-attr">模板:跨度><跨度类="hljs-string">“data_collector / template.html.twig”跨度><跨度类="hljs-comment">#可选优先级(正整数或负整数;默认值= 0)跨度><跨度类="hljs-comment">#优先级:300跨度>