layout.html.twig 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. {% extends '@WebProfiler/Profiler/base.html.twig' %}
  2. {% block body %}
  3. {{ include('@WebProfiler/Profiler/header.html.twig', with_context = false) }}
  4. <div id="summary">
  5. {% block summary %}
  6. {% if profile is defined %}
  7. {% set request_collector = profile.collectors.request|default(false) %}
  8. {% set status_code = request_collector ? request_collector.statuscode|default(0) : 0 %}
  9. {% set css_class = status_code > 399 ? 'status-error' : status_code > 299 ? 'status-warning' : 'status-success' %}
  10. <div class="status {{ css_class }}">
  11. <div class="container">
  12. <h2 class="break-long-words">
  13. {% if profile.method|upper in ['GET', 'HEAD'] %}
  14. <a href="{{ profile.url }}">{{ profile.url }}</a>
  15. {% else %}
  16. {{ profile.url }}
  17. {% set referer = request_collector ? request_collector.requestheaders.get('referer') : null %}
  18. {% if referer %}
  19. <a href="{{ referer }}" class="referer">Return to referer URL</a>
  20. {% endif %}
  21. {% endif %}
  22. </h2>
  23. {% if request_collector and request_collector.redirect -%}
  24. {%- set redirect = request_collector.redirect -%}
  25. {%- set controller = redirect.controller -%}
  26. {%- set redirect_route = '@' ~ redirect.route %}
  27. <dl class="metadata">
  28. <dt>
  29. <span class="label">{{ redirect.status_code }}</span>
  30. Redirect from
  31. </dt>
  32. <dd>
  33. {{ 'GET' != redirect.method ? redirect.method }}
  34. {% if redirect.controller.class is defined -%}
  35. {%- set link = controller.file|file_link(controller.line) -%}
  36. {% if link %}<a href="{{ link }}" title="{{ controller.file }}">{% endif -%}
  37. {{ redirect_route }}
  38. {%- if link %}</a>{% endif -%}
  39. {%- else -%}
  40. {{ redirect_route }}
  41. {%- endif %}
  42. (<a href="{{ path('_profiler', { token: redirect.token, panel: request.query.get('panel', 'request') }) }}">{{ redirect.token }}</a>)
  43. </dd>
  44. </dl>
  45. {%- endif %}
  46. {% if request_collector and request_collector.forwardtoken -%}
  47. {% set forward_profile = profile.childByToken(request_collector.forwardtoken) %}
  48. {% set controller = forward_profile ? forward_profile.collector('request').controller : 'n/a' %}
  49. <dl class="metadata">
  50. <dt>Forwarded to</dt>
  51. <dd>
  52. {% set link = controller.file is defined ? controller.file|file_link(controller.line) : null -%}
  53. {%- if link %}<a href="{{ link }}" title="{{ controller.file }}">{% endif -%}
  54. {% if controller.class is defined %}
  55. {{- controller.class|abbr_class|striptags -}}
  56. {{- controller.method ? ' :: ' ~ controller.method -}}
  57. {% else %}
  58. {{- controller -}}
  59. {% endif %}
  60. {%- if link %}</a>{% endif %}
  61. (<a href="{{ path('_profiler', { token: request_collector.forwardtoken }) }}">{{ request_collector.forwardtoken }}</a>)
  62. </dd>
  63. </dl>
  64. {%- endif %}
  65. <dl class="metadata">
  66. <dt>Method</dt>
  67. <dd>{{ profile.method|upper }}</dd>
  68. <dt>HTTP Status</dt>
  69. <dd>{{ status_code }}</dd>
  70. <dt>IP</dt>
  71. <dd>
  72. <a href="{{ path('_profiler_search_results', { token: token, limit: 10, ip: profile.ip }) }}">{{ profile.ip }}</a>
  73. </dd>
  74. <dt>Profiled on</dt>
  75. <dd><time datetime="{{ profile.time|date('c') }}">{{ profile.time|date('r') }}</time></dd>
  76. <dt>Token</dt>
  77. <dd>{{ profile.token }}</dd>
  78. </dl>
  79. </div>
  80. </div>
  81. {% endif %}
  82. {% endblock %}
  83. </div>
  84. <div id="content" class="container">
  85. <div id="main">
  86. <div id="sidebar">
  87. <div id="sidebar-shortcuts">
  88. <div class="shortcuts">
  89. <a href="#" id="sidebarShortcutsMenu" class="visible-small">
  90. <span class="icon">{{ include('@WebProfiler/Icon/menu.svg') }}</span>
  91. </a>
  92. <a class="btn btn-sm" href="{{ path('_profiler_search', { limit: 10 }) }}">Last 10</a>
  93. <a class="btn btn-sm" href="{{ path('_profiler', { token: 'latest' }|merge(request.query.all)) }}">Latest</a>
  94. <a class="sf-toggle btn btn-sm" data-toggle-selector="#sidebar-search" {% if tokens is defined or about is defined %}data-toggle-initial="display"{% endif %}>
  95. {{ include('@WebProfiler/Icon/search.svg') }} <span class="hidden-small">Search</span>
  96. </a>
  97. {{ render(path('_profiler_search_bar', request.query.all)) }}
  98. </div>
  99. </div>
  100. {% if templates is defined %}
  101. <ul id="menu-profiler">
  102. {% for name, template in templates %}
  103. {% set menu -%}
  104. {%- if block('menu', template) is defined -%}
  105. {% with { collector: profile.getcollector(name), profiler_markup_version: profiler_markup_version } %}
  106. {{- block('menu', template) -}}
  107. {% endwith %}
  108. {%- endif -%}
  109. {%- endset %}
  110. {% if menu is not empty %}
  111. <li class="{{ name }} {{ name == panel ? 'selected' : '' }}">
  112. <a href="{{ path('_profiler', { token: token, panel: name }) }}">{{ menu|raw }}</a>
  113. </li>
  114. {% endif %}
  115. {% endfor %}
  116. </ul>
  117. {% endif %}
  118. {{ include('@WebProfiler/Profiler/settings.html.twig') }}
  119. </div>
  120. <div id="collector-wrapper">
  121. <div id="collector-content">
  122. {{ include('@WebProfiler/Profiler/base_js.html.twig') }}
  123. {% block panel '' %}
  124. </div>
  125. </div>
  126. </div>
  127. </div>
  128. <script>
  129. (function () {
  130. Sfjs.addEventListener(document.getElementById('sidebarShortcutsMenu'), 'click', function (event) {
  131. event.preventDefault();
  132. Sfjs.toggleClass(document.getElementById('sidebar'), 'expanded');
  133. })
  134. }());
  135. </script>
  136. {% endblock %}