feature #24236 [WebProfilerBundle] Render file links for twig templates (ro0NL)
This PR was squashed before being merged into the 3.4 branch (closes #24236).
Discussion
----------
[WebProfilerBundle] Render file links for twig templates
| Q | A
| ------------- | ---
| Branch? | 3.4
| Bug fix? | no
| New feature? | yes
| BC breaks? | no
| Deprecations? | no
| Tests pass? | yes/no
| Fixed tickets | #24218
| License | MIT
| Doc PR | symfony/symfony-docs#... <!--highly recommended for new features-->
![image](https://user-images.githubusercontent.com/1047696/30515418-8c4615c6-9b27-11e7-8e26-8caa30ff7cbb.png)
Also tweaked default code color a bit for yaml, twig and the like.
Before
![image](https://user-images.githubusercontent.com/1047696/30515499-2231d768-9b29-11e7-8cab-a61537e83343.png)
After
![image](https://user-images.githubusercontent.com/1047696/30515504-354ea218-9b29-11e7-9457-518e9413e6f9.png)
Commits
-------
860575a882
[WebProfilerBundle] Render file links for twig templates
This commit is contained in:
commit
9ebe2185bd
@ -15,6 +15,7 @@ use Symfony\Component\HttpKernel\DataCollector\DataCollector;
|
|||||||
use Symfony\Component\HttpKernel\DataCollector\LateDataCollectorInterface;
|
use Symfony\Component\HttpKernel\DataCollector\LateDataCollectorInterface;
|
||||||
use Symfony\Component\HttpFoundation\Request;
|
use Symfony\Component\HttpFoundation\Request;
|
||||||
use Symfony\Component\HttpFoundation\Response;
|
use Symfony\Component\HttpFoundation\Response;
|
||||||
|
use Twig\Environment;
|
||||||
use Twig\Markup;
|
use Twig\Markup;
|
||||||
use Twig\Profiler\Dumper\HtmlDumper;
|
use Twig\Profiler\Dumper\HtmlDumper;
|
||||||
use Twig\Profiler\Profile;
|
use Twig\Profiler\Profile;
|
||||||
@ -27,11 +28,13 @@ use Twig\Profiler\Profile;
|
|||||||
class TwigDataCollector extends DataCollector implements LateDataCollectorInterface
|
class TwigDataCollector extends DataCollector implements LateDataCollectorInterface
|
||||||
{
|
{
|
||||||
private $profile;
|
private $profile;
|
||||||
|
private $twig;
|
||||||
private $computed;
|
private $computed;
|
||||||
|
|
||||||
public function __construct(Profile $profile)
|
public function __construct(Profile $profile, Environment $twig)
|
||||||
{
|
{
|
||||||
$this->profile = $profile;
|
$this->profile = $profile;
|
||||||
|
$this->twig = $twig;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -47,6 +50,17 @@ class TwigDataCollector extends DataCollector implements LateDataCollectorInterf
|
|||||||
public function lateCollect()
|
public function lateCollect()
|
||||||
{
|
{
|
||||||
$this->data['profile'] = serialize($this->profile);
|
$this->data['profile'] = serialize($this->profile);
|
||||||
|
$this->data['template_paths'] = array();
|
||||||
|
|
||||||
|
$templateFinder = function (Profile $profile) use (&$templateFinder) {
|
||||||
|
if ($profile->isTemplate() && $template = $this->twig->load($profile->getName())->getSourceContext()->getPath()) {
|
||||||
|
$this->data['template_paths'][$profile->getName()] = $template;
|
||||||
|
}
|
||||||
|
foreach ($profile as $p) {
|
||||||
|
$templateFinder($p);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
$templateFinder($this->profile);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getTime()
|
public function getTime()
|
||||||
@ -59,6 +73,11 @@ class TwigDataCollector extends DataCollector implements LateDataCollectorInterf
|
|||||||
return $this->getComputedData('template_count');
|
return $this->getComputedData('template_count');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getTemplatePaths()
|
||||||
|
{
|
||||||
|
return $this->data['template_paths'];
|
||||||
|
}
|
||||||
|
|
||||||
public function getTemplates()
|
public function getTemplates()
|
||||||
{
|
{
|
||||||
return $this->getComputedData('templates');
|
return $this->getComputedData('templates');
|
||||||
|
@ -68,6 +68,7 @@
|
|||||||
<service id="data_collector.twig" class="Symfony\Bridge\Twig\DataCollector\TwigDataCollector">
|
<service id="data_collector.twig" class="Symfony\Bridge\Twig\DataCollector\TwigDataCollector">
|
||||||
<tag name="data_collector" template="@WebProfiler/Collector/twig.html.twig" id="twig" priority="257" />
|
<tag name="data_collector" template="@WebProfiler/Collector/twig.html.twig" id="twig" priority="257" />
|
||||||
<argument type="service" id="twig.profile" />
|
<argument type="service" id="twig.profile" />
|
||||||
|
<argument type="service" id="twig" />
|
||||||
</service>
|
</service>
|
||||||
|
|
||||||
<service id="twig.extension.trans" class="Symfony\Bridge\Twig\Extension\TranslationExtension">
|
<service id="twig.extension.trans" class="Symfony\Bridge\Twig\Extension\TranslationExtension">
|
||||||
|
@ -85,7 +85,9 @@
|
|||||||
<tbody>
|
<tbody>
|
||||||
{% for template, count in collector.templates %}
|
{% for template, count in collector.templates %}
|
||||||
<tr>
|
<tr>
|
||||||
<td>{{ template }}</td>
|
{%- set file = collector.templatePaths[template]|default(false) -%}
|
||||||
|
{%- set link = file ? file|file_link(1) : false -%}
|
||||||
|
<td>{% if link %}<a href="{{ link }}" title="{{ file }}">{{ template }}</a>{% else %}{{ template }}{% endif %}</td>
|
||||||
<td class="font-normal">{{ count }}</td>
|
<td class="font-normal">{{ count }}</td>
|
||||||
</tr>
|
</tr>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
@ -58,6 +58,10 @@ a.doc:hover {
|
|||||||
margin-top: 41px;
|
margin-top: 41px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.source li code {
|
||||||
|
color: #555;
|
||||||
|
}
|
||||||
|
|
||||||
.source li.selected {
|
.source li.selected {
|
||||||
background: rgba(255, 255, 153, 0.5);
|
background: rgba(255, 255, 153, 0.5);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user