2013-05-13 2 views
3

내 자신의 맞춤 데이터로 Symfony2 Debug Toolbar를 확장하고 싶습니다.사용자 정의 데이터로 Symfony2 Debug Toolbar를 확장하는 방법은 무엇입니까?

특정 메소드 호출을 기록한 다음 웹 디버그 도구 모음에 표시하려는 서비스가 있습니다.

은 내가 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을 사용하고 있습니다.

누구나 사용자 정의 데이터로 툴바를 확장 했습니까?

+2

나는 메모리에서이 작업을 수행하는 방법을 모르겠지만, FOQElasticaBundle 그것을 시작하는 좋은 장소가 될 것입니다 ElasticSearch 쿼리의 로그를 표시한다는 것을 알고있다. – Steve

+0

아 멋지다! 그것은 작동합니다. 기본적으로'$ this-> data'를 항상 참조해야합니다. 번들 참조에 대해 감사드립니다. –

+0

하, 슛과 점수 :) 기꺼이 도와 줬어! – Steve

답변

1

아 좋은! 그것은 작동합니다. 기본적으로 $ this-> data를 항상 참조해야합니다.

이유 -> 데이터 Symfony\Component\HttpKernel\DataCollector\DataCollector과 직렬로 사용된다 (DataCollector :: 직렬화 참조).

이것은 나중에 저장됩니다 (어쨌든, 나는 어디 있는지 모르지만 나중에 비 직렬화 됨). 자신의 속성을 사용하는 경우 DataCollector::unserialize은 데이터를 정리합니다. 프로파일 러는 데이터 수집기 ​​인스턴스를 직렬화으로

https://symfony.com/doc/current/profiler/data_collector.html#creating-a-custom-data-collector

를 참조하십시오, 당신은 (PDO 오브젝트 등) 직렬화 할 수없는 객체를 저장하지 말아야 또는 당신은 당신의 자신의 직렬화() 메소드를 제공해야합니다.

그냥 $ this-> 데이터 모든 시간을 사용하거나 자신의 \Serializable 직렬화를 구현합니다.