扩展Web调试工具栏
由瑞安韦弗
默认情况下,symfonob娱乐下载y的web调试工具栏包含了各种工具,协助调试,性能增强和更多。web调试工具栏由几种工具web调试面板与缓存配置,日志记录、内存使用symfony的版本,和处理时间。ob娱乐下载此外,symfony 1.3ob娱乐下载引入了两个额外的web调试面板为视图
信息和邮件
调试。
symfonob娱乐下载y 1.2,开发人员可以轻松地创建自己的web调试面板并将它们添加到web调试工具栏。在这一章里,我们将设置一个新的web调试面板然后玩所有可用的不同的工具和定制。此外,ac2009WebDebugPlugin包含几个有用的和有趣的调试面板,使用本章中使用的一些技术。
创建一个新的Web调试面板
单个组件的web调试工具栏被称为web调试面板特殊类扩展sfWebDebugPanel
类。创建一个新的面板实际上相当容易。创建一个文件命名sfWebDebugPanel欧宝官网下载appDocumentation.class.php
在你的项目的lib /调试/
目录中(您需要创建这个目录):
/ / lib /调试/ sfWebDebugPanel欧宝官网下载appDocumentation.class.php类acWebDebugPanel欧宝官网下载appDocumentation扩展sfWebDebugPanel{公共函数getTitle(){返回' < img src = " /遗留/图片/文档。欧宝官网下载apppng文档" alt欧宝官网下载app = "快捷方式"高度= " 16 "宽度= " " / >文档的;}公共函数getPanelTitle(){返回“欧宝官网下载app文档”;}公共函数getPanelContent(){美元的内容=“占位符面板内容”;返回美元的内容;}}
至少,所有调试面板必须实现getTitle ()
,getPanelTitle ()
和getPanelContent ()
方法。
sfWebDebugPanel: getTitle ()
:决定面板将显示在工具栏本身。像大多数电池板,自定义面板包括一个小图标和一个短名称的面板。sfWebDebugPanel: getPanelTitle ()
:作为文本h1
标签会出现在顶部面板的内容。这也是作为标题
链接的属性标签包装工具栏中的图标,应该不包括任何html代码。sfWebDebugPanel: getPanelContent ()
:生成原始html内容将显示当你点击面板图标。
唯一剩下的步骤是通知您想包括新面板的应用程序在你的工具栏。为此,添加一个侦听器debug.web.load_panels
事件,通知当web调试工具栏是收集潜在的面板。首先,修改配置/ ProjectConfiguration.class.php
文件侦听事件:
/ /配置/ ProjectConfiguration.class.php公共函数设置(){/ /……这个美元- >调度程序- >连接(“debug.web.load_panels”,数组(“acWebDebugPanel欧宝官网下载appDocumentation”,“listenToLoadDebugWebPanelEvent”));}
现在,让我们来添加listenToLoadDebugWebPanelEvent ()
侦听器函数acWebDebugPanel欧宝官网下载appDocumentation.class.php
为了将面板添加到工具栏:
/ / lib /调试/ sfWebDebugPanel欧宝官网下载appDocumentation.class.php公共静态函数listenToLoadDebugWebPanelEvent(sfEvent美元的事件){美元的事件- >getSubject()- >setPanel(“欧宝官网下载app文档”,新自我(美元的事件- >getSubject()));}
就是这样!刷新浏览器,你就会立刻看到结果。
提示
在symfoob娱乐下载ny 1.3,sfWebDebugPanel
url参数可用于自动打开一个特定的web调试小组页面加载。例如,添加? sfWebDebugPanel欧宝官网下载app =文档
的url将自动打开文档面板我们只是补充道。欧宝官网下载app这个可以变得非常方便,同时构建定制的面板。
三种类型的网络调试面板
在幕后,有三种不同类型的网络调试面板。
的Icon-Only板类型
最基本的类型的面板是一个显示工具栏上的图标和文本。典型的例子是内存
面板显示内存使用,但并没有点击的时候。创建一个icon-only面板,简单的设置getPanelContent ()
返回一个空字符串。来自唯一的输出面板getTitle ()
方法:
公共函数getTitle(){totalMemory美元=sprintf(“% .1f”,(memory_get_peak_usage(真正的)/1024年));返回< img src = "的。这个美元- >webDebug- >getOption(“image_root_path”)。' /内存。png“alt = "记忆" / > '。totalMemory美元。“知识库”;}公共函数getPanelContent(){返回;}
的链接板类型
就像icon-only面板,链接面板由没有面板的内容。不像icon-only然而,面板,点击链接面板工具栏上的将带你通过指定urlgetTitleUrl ()
面板的方法。创建一个链接面板,设置getPanelContent ()
返回一个空字符串,并添加一个getTitleUrl ()
类的方法。
公共函数getTitleUrl(){/ /链接到一个外部uri返回“/ api / 1 _3 /”;/ /或链接到一个在您的应用程序返回url_for(“主页”);}公共函数getPanelContent(){返回;}
的内容板类型
到目前为止,最常见的类型的面板内容面板。这些面板有一个完整的身体,当你点击显示的html内容面板的调试工具栏。要创建这种类型的面板,只需确保getPanelContent ()
返回超过一个空字符串。
自定义面板内容
既然你创建和添加自定义web调试面板工具栏,添加内容可以很容易通过getPanelContent ()
方法。ob娱乐下载Symfony提供几种方法帮助您将这个内容丰富和实用。
sfWebDebugPanel: setStatus ()
缺省情况下,每个小组web调试工具栏显示使用默认的灰色背景。这个可以改变,但是,一个橙色或红色背景如果需要特别注意面板内部的一些内容。
改变背景颜色的面板,简单地采用setStatus ()
方法。该方法接受任何优先级
的常数sfLogger类。特别是,有三种不同的状态水平对应的三种不同的背景颜色面板(灰色、橙色和红色)。最常见的,setStatus ()
方法将从内部被称为getPanelContent ()
方法发生某一条件时,需要特别注意。
公共函数getPanelContent(){/ /……/ /设置背景为灰色(默认)这个美元- >setStatus(sfLogger::信息);/ /设置背景为橙色这个美元- >setStatus(sfLogger::警告);/ /设置背景为红色这个美元- >setStatus(sfLogger::犯错);}
sfWebDebugPanel: getToggler ()
最常见的一种特性在现有web调试面板是一个善变者:视觉元素箭,当点击隐藏/显示一个容器的内容。
这个功能可以很容易地用于自定义web调试面板通过getToggler ()
函数。例如,假设我们想要切换面板内容列表:
公共函数getPanelContent(){listContent美元=' < ul id =“deb欧宝官网下载appug_documentation_list”风格=”显示:没有;李> <李>列表项1 < / > <李>列表项2李< / > < / ul > ';美元善变者=这个美元- >getToggler(“debug_欧宝官网下载appdocumentation_list”,“切换列表”);返回sprintf(列表项的< h3 > % s < / h3 > % s ',美元善变者,listContent美元);}
的getToggler
有两个参数:DOMid
切换元素的和标题
设置为标题
善变者链接的属性。由你来创建DOM元素id
(如属性以及任何描述性的标签。善变者“列表”)。
sfWebDebugPanel: getToggleableDebugStack ()
类似于getToggler ()
,getToggleableDebugStack ()
呈现一个可点击箭头切换显示一组内容。在这种情况下,设置的内容是一个调试堆栈跟踪。这个函数是非常有用的,如果你需要为一个自定义类显示日志结果。例如,假设我们执行一些自定义登录一个类调用myCustomClass
:
类myCustomClass{公共函数doSomething(){美元的调度员= sfApplicationConfiguration::getActive()- >getEventDispatcher();美元的调度员- >通知(新sfEvent(这个美元,“application.log”,数组(“优先”= > sfLogger::信息,“开始执行myCustomClass: doSomething ()”,)));}}
作为一个例子,让我们显示相关的日志消息的列表myCustomClass
完成调试堆栈跟踪。
公共函数getPanelContent(){/ /获取当前请求的所有日志消息美元的日志=这个美元- >webDebug- >getlog()- >getlog();logList美元=”;foreach(美元的日志作为美元的日志){如果(美元的日志(“类型”]= =“myCustomClass”){logList美元=。sprintf(<李> % s %年代李< / > ',美元的日志(“消息”],这个美元- >getToggleableDebugStack(美元的日志(“debug_backtrace”]));}}返回sprintf(' < ul > % s < / ul >”,logList美元);}
请注意
即使没有创建一个自定义面板中,日志消息myCustomClass
将显示在日志面板。优点是简单地收集这个子集的日志消息在一个位置和控制其输出。
sfWebDebugPanel: formatFileLink ()
新1.3 syob娱乐下载mfony是能够点击文件在web调试工具栏,让他们在您喜欢的文本编辑器。有关更多信息,请参见“新”是什么symfony 1.3条ob娱乐下载。
激活这个特性对于任何特定的文件路径,formatFileLink ()
必须使用。除了文件本身,一个精确的线可以有针对性。例如,下面的代码将链接到第15行配置/ ProjectConfiguration.class.php
:
公共函数getPanelContent(){美元的内容=”;/ /……美元的路径= sfConfig::得到(“sf_config_dir”)。' / ProjectConfiguration.class.php ';美元的内容=。这个美元- >formatFileLink(美元的路径,15,“项目配置”);返回美元的内容;}
第二个参数(行号)和第三个参数(链接文本)是可选的。如果没有指定“链接文本”参数,将文件路径显示为链接的文本。
请注意
在测试之前,要确保你已经配置了新文件链接功能。通过此功能可以设置sf_file_link_format
关键在settings.yml
或通过file_link_format
设置在xdebug。后一种方法确保项目不绑定到一个特定的IDE。
其他一些与Web调试工具栏
在大多数情况下,定制web调试面板的魔力将包含在您所选择的内容和信息显示。然而,更多的技巧值得探索。
删除默认的面板
默认情况下,symfonob娱乐下载y会自动加载几个web调试面板到web调试工具栏。通过使用debug.web.load_panels
事件,这些默认的面板也可以轻松地删除。使用相同的侦听器函数声明前,但取代的身体removePanel ()
函数。下面的代码将删除内存
从工具栏面板:
公共静态函数listenToLoadDebugWebPanelEvent(sfEvent美元的事件){美元的事件- >getSubject()- >removePanel(“记忆”);}
从面板访问请求参数
最常见的事情之一需要在web调试面板请求参数。说,例如,你想显示从数据库的信息事件
基于数据库中的对象的event_id
请求参数:
美元的参数=这个美元- >webDebug- >getOption(“request_parameters”);如果(收取(美元的参数(“event_id”])){美元的事件=学说::可以获得的(“事件”)- >找到(美元的参数(“event_id”]);}
有条件地隐藏一个面板
有时候,你的小组可能没有任何有用的信息显示为当前请求。在这些情况下,您可以选择隐藏面板。我们假设,在上一个示例中,自定义面板显示任何信息,除非一个event_id
请求参数。隐藏的面板,仅返回任何内容getTitle ()
方法:
公共函数getTitle(){美元的参数=这个美元- >webDebug- >getOption(“request_parameters”);如果(!收取(美元的参数(“event_id”])){返回;}返回' < img src = " / acWebDebugPlugin /遗留/图片/文欧宝官网下载app档。png文档" alt欧宝官网下载app = "快捷方式"高度= " 16 "宽度= " " / >文档的;}
最终的想法
web调试工具栏的存在是为了让开发人员的生活更加轻松,但这不仅仅是一个被动的信息显示。通过添加自定义web调试面板、网络调试工具栏的潜力是有限的,只有开发人员的想象力。的ac2009WebDebugPlugin只包含一些面板,可以创建。创建你自己的。
这项工作在Creative Commons许可Attribution-Share都3.0 Unported许可执照。