我想用自己的自定义数据扩展Symfony2调试工具栏。
我有一项服务,我想记录特定的方法调用,然后在Web调试工具栏中显示它们。
我读了cookbook article,但这不是很有帮助。
我创建了自己的DataCollector
类:
class PermissionDataCollector extends DataCollector
{
private $permissionCalls = array();
private $permissionExtension;
public function __construct(PermissionExtension $permissionExtension)
{
$this->permissionExtension = $permissionExtension;
}
/**
* Collects data for the given Request and Response.
*
* @param Request $request A Request instance
* @param Response $response A Response instance
* @param \Exception $exception An Exception instance
*
* @api
*/
public function collect(Request $request, Response $response, \Exception $exception = null)
{
$this->permissionCalls = $this->permissionExtension->getPermissionCalls();
$this->data = array(
'calls' => $this->permissionCalls
);
}
public function getPermissionCallsCount()
{
return count($this->permissionCalls);
}
public function getFailedPermissionCallsCount()
{
return count(array_filter($this->permissionCalls, array(&$this, "filterForFailedPermissionCalls")));
}
private function filterForFailedPermissionCalls($var)
{
return $var['success'];
}
/**
* Returns the name of the collector.
*
* @return string The collector name
*
* @api
*/
public function getName()
{
return 'permission';
}
}
PermissionExtension
记录所有呼叫,然后我要检索此呼叫数组PermissionDataCollector
。模板仅输出
{{ collector.permissionCallsCount }}
。该部分显示在工具栏中,但是仅显示
0
错误。我不确定我是否正确地执行了此操作,因为文档缺少此部分。我正在使用Symfony 2.1
是否有人用自定义数据扩展了工具栏?
最佳答案
太好了!有用。我基本上需要一直引用$ this-> data。
其原因是Symfony\Component\HttpKernel\DataCollector\DataCollector
使用-> data并对其进行了序列化(请参阅DataCollector :: serialize)。
稍后将其存储(以某种方式,我不知道在哪里,但是稍后将其反序列化)。如果使用自己的属性,则DataCollector::unserialize
仅会修剪您的数据。
见https://symfony.com/doc/current/profiler/data_collector.html#creating-a-custom-data-collector
在探查器序列化数据收集器实例时,您不应存储无法序列化的对象(例如PDO对象),或者需要提供自己的serialize()方法。
只需一直使用$ this-> data,或实现自己的\Serializable
序列化即可。