Вход Регистрация
Файл: symfony-2.7/src/Symfony/Bridge/Twig/DataCollector/TwigDataCollector.php
Строк: 110
<?php

/*
 * This file is part of the Symfony package.
 *
 * (c) Fabien Potencier <fabien@symfony.com>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace SymfonyBridgeTwigDataCollector;

use 
SymfonyComponentHttpKernelDataCollectorDataCollector;
use 
SymfonyComponentHttpKernelDataCollectorLateDataCollectorInterface;
use 
SymfonyComponentHttpFoundationRequest;
use 
SymfonyComponentHttpFoundationResponse;

/**
 * TwigDataCollector.
 *
 * @author Fabien Potencier <fabien@symfony.com>
 */
class TwigDataCollector extends DataCollector implements LateDataCollectorInterface
{
    private 
$profile;
    private 
$computed;

    public function 
__construct(Twig_Profiler_Profile $profile)
    {
        
$this->profile $profile;
    }

    
/**
     * {@inheritdoc}
     */
    
public function collect(Request $requestResponse $responseException $exception null)
    {
    }

    
/**
     * {@inheritdoc}
     */
    
public function lateCollect()
    {
        
$this->data['profile'] = serialize($this->profile);
    }

    public function 
getTime()
    {
        return 
$this->getProfile()->getDuration() * 1000;
    }

    public function 
getTemplateCount()
    {
        return 
$this->getComputedData('template_count');
    }

    public function 
getTemplates()
    {
        return 
$this->getComputedData('templates');
    }

    public function 
getBlockCount()
    {
        return 
$this->getComputedData('block_count');
    }

    public function 
getMacroCount()
    {
        return 
$this->getComputedData('macro_count');
    }

    public function 
getHtmlCallGraph()
    {
        
$dumper = new Twig_Profiler_Dumper_Html();

        return new 
Twig_Markup($dumper->dump($this->getProfile()), 'UTF-8');
    }

    public function 
getProfile()
    {
        if (
null === $this->profile) {
            
$this->profile unserialize($this->data['profile']);
        }

        return 
$this->profile;
    }

    private function 
getComputedData($index)
    {
        if (
null === $this->computed) {
            
$this->computed $this->computeData($this->getProfile());
        }

        return 
$this->computed[$index];
    }

    private function 
computeData(Twig_Profiler_Profile $profile)
    {
        
$data = array(
            
'template_count' => 0,
            
'block_count' => 0,
            
'macro_count' => 0,
        );

        
$templates = array();
        foreach (
$profile as $p) {
            
$d $this->computeData($p);

            
$data['template_count'] += ($p->isTemplate() ? 0) + $d['template_count'];
            
$data['block_count'] += ($p->isBlock() ? 0) + $d['block_count'];
            
$data['macro_count'] += ($p->isMacro() ? 0) + $d['macro_count'];

            if (
$p->isTemplate()) {
                if (!isset(
$templates[$p->getTemplate()])) {
                    
$templates[$p->getTemplate()] = 1;
                } else {
                    
$templates[$p->getTemplate()]++;
                }
            }

            foreach (
$d['templates'] as $template => $count) {
                if (!isset(
$templates[$template])) {
                    
$templates[$template] = $count;
                } else {
                    
$templates[$template] += $count;
                }
            }
        }
        
$data['templates'] = $templates;

        return 
$data;
    }

    
/**
     * {@inheritdoc}
     */
    
public function getName()
    {
        return 
'twig';
    }
}
Онлайн: 0
Реклама