Моя панель інструментів профілера не відображається у симфонії 4.3.1


9

У моєму .envфайлі я вказав, що моє середовище додатка буде розробленим і налагоджено, щоб бути правдивим так:

APP_ENV=dev
APP_DEBUG=true

У моєму config/packages/dev/web_profiler.yamlфайлі є наступне:

web_profiler:
    toolbar: true
    intercept_redirects: false

framework:
    profiler: { only_exceptions: false }

Маршрут всередині config/routes/dev/web_profiler.yamlздається нормальним:

web_profiler_wdt:
    resource: '@WebProfilerBundle/Resources/config/routing/wdt.xml'
    prefix: /_wdt

web_profiler_profiler:
    resource: '@WebProfilerBundle/Resources/config/routing/profiler.xml'
    prefix: /_profiler

Тож коли я запускаю сервер, symfony server:startвсе добре, але профайлер не з’являється. Чи пропустив я щось, що дозволяє цю функцію в Symfony?

Для уточнення сторінка виводить належну HTML-сторінку з відповідним вмістом. Профілера просто не з’являється.


Мій базовий шаблон гілочки:

<!DOCTYPE html>
<html lang="en" dir="ltr">
    <head>
        <meta charset="utf-8">
        <title>{% block title %} {% endblock %}</title>
        {{ encore_entry_script_tags('base') }}
        <link rel="icon" type="image/x-icon" href="{{ asset('build/images/favicon.ico') }}" />
        <link href="https://fonts.googleapis.com/css?family=IBM+Plex+Sans:400,500|Playfair+Display:400,700&display=swap" rel="stylesheet">
        {{ encore_entry_link_tags("base") }}
        {% block stylesheet %}{% endblock %}
    </head>
    <body {% if app.request.get('_route') == 'home' %} class='homepage' {% endif %} >
        <header>
            <div id='top-navigation' class='padding-lg__left-md padding-lg__right-md padding-lg__top-sm padding-lg__bottom-sm row row__align-center row__justify-start'>
                <span class='text-color__white text-size__small text-weight__bold margin-lg__right-lg'>Our Mission</span>
                <span class='text-color__white text-size__small text-weight__bold margin-lg__right-lg'>Our Team</span>
                <span class='text-color__white text-size__small text-weight__bold margin-lg__right-lg'>Where the Money Goes</span>
                <span class='text-color__white text-size__small text-weight__bold margin-lg__right-lg'>Community Leadership</span>
                <span class='text-color__white text-size__small text-weight__bold'>Policies</span>
                <span class='text-color__white text-size__small text-weight__bold margin-lg__left-auto icon-set'> <span class='icon size__small color__white margin-lg__right-xsm'>{{ source('@public_path'~asset('build/images/icons/feedback.svg')) }}</span>Submit Feedback</span>
            </div>
            <nav class="padding-lg__top-md padding-lg__bottom-md padding-lg__left-md padding-lg__right-md row row__align-center row__justify-start {% if app.request.get('_route') == 'home' %} homepage {% endif %}">
                <div id='logo'>
                    <a href="{{ url('home') }}">
                        <img src="{{ asset('build/images/logo_placeholder.png') }}" alt="logo">
                    </a>
                </div>
                {% if app.request.get('_route') == 'creator-register' %}

                {% else %}
                    {% if not is_granted('IS_AUTHENTICATED_FULLY') %}
                        <div class='margin-lg__left-auto'>
                            <a href="{{ url('login') }}">
                                <div class='icon-set'>
                                    <span class='icon margin-lg__right-xsm'>
                                        {{ source('@public_path'~asset('build/images/icons/user.svg')) }}
                                    </span>
                                    <span class='nav-item'>Login</span>
                                </div>
                            </a>
                        </div>
                    {% endif %}

                {% endif %}
            </nav>
        </header>
        {% if app.request.get('_route') != 'home' %} <div class='container is_top'> {% endif %}
            {% block body %} {% endblock %}
        {% if app.request.get('_route') != 'home' %} </div> {% endif %}
    </body>
</html>

Брандмауер Security.yaml:

    firewalls:
            dev:
                pattern: ^/(_(profiler|wdt)|css|images|js)/
                security: false
            main:
                anonymous: true
                guard:
                    authenticators:
                        - App\Security\LoginFormAuthenticator
                logout:
                    path : logout
                remember_me:
                    secret: '%kernel.secret%'
                    lifetime: 2592000 #<- 30 days in seconds - defaults to one year if you take this out!

Результати за php bin/console debug:router | grep _profiler:

  _profiler_home             ANY      ANY      ANY    /_profiler/                        
  _profiler_search           ANY      ANY      ANY    /_profiler/search                  
  _profiler_search_bar       ANY      ANY      ANY    /_profiler/search_bar              
  _profiler_phpinfo          ANY      ANY      ANY    /_profiler/phpinfo                 
  _profiler_search_results   ANY      ANY      ANY    /_profiler/{token}/search/results  
  _profiler_open_file        ANY      ANY      ANY    /_profiler/open                    
  _profiler                  ANY      ANY      ANY    /_profiler/{token}                 
  _profiler_router           ANY      ANY      ANY    /_profiler/{token}/router          
  _profiler_exception        ANY      ANY      ANY    /_profiler/{token}/exception       
  _profiler_exception_css    ANY      ANY      ANY    /_profiler/{token}/exception.css 

Нарешті контролер домашньої сторінки:

<?php
namespace App\Controller;

use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;

class HomepageController extends AbstractController{

    /**
    * @Route("/", name="home")
    */

    public function output(){
        return $this->render('homepage/home.html.twig',[
            'title' => 'yo',
        ]);
    }
}

?>

Додано public / index.php:

<?php

use App\Kernel;
use Symfony\Component\Debug\Debug;
use Symfony\Component\HttpFoundation\Request;

require dirname(__DIR__).'/config/bootstrap.php';

if ($_SERVER['APP_DEBUG']) {
    umask(0000);

    Debug::enable();
}

if ($trustedProxies = $_SERVER['TRUSTED_PROXIES'] ?? $_ENV['TRUSTED_PROXIES'] ?? false) {
    Request::setTrustedProxies(explode(',', $trustedProxies), Request::HEADER_X_FORWARDED_ALL ^ Request::HEADER_X_FORWARDED_HOST);
}

if ($trustedHosts = $_SERVER['TRUSTED_HOSTS'] ?? $_ENV['TRUSTED_HOSTS'] ?? false) {
    Request::setTrustedHosts([$trustedHosts]);
}

$kernel = new Kernel($_SERVER['APP_ENV'], (bool) $_SERVER['APP_DEBUG']);
$request = Request::createFromGlobals();
$response = $kernel->handle($request);
$response->send();
$kernel->terminate($request, $response);

Зробіть ctrl-u у своєму браузері та переконайтеся, що у вас є HTML-сторінка. Панель буде присутня лише для фактичної сторінки.
Церад

1
1. Чи можете ви перевірити на вкладці мережі вашого браузера (F12 у ff та chrome), що, можливо, завантажено якийсь маршрут _profiler? (якщо так, він завантажений, але невидимий). 2. чи активний пакет веб-профілерів, запустіть bin/console debug:event-dispatcher kernel.responseтам, де пріоритет -128 повинен бути WebDebugToolbarListener::onKernelResponse. якщо його немає, перевірте config / bundles.php, який повинен містити WebProfilerBundle. так.
Джакумі

2
@ Majo0od Якщо ви виявили, що умови рядка 102 змушують слухача перестати працювати, що ви намагалися зробити це далі? До якої з цих умов належить оцінити true?
Ніко Хааз

1
Тимчасово модифікувати WebDebugToolbarListener.php. У рядку 109 додайте це перед оператором return: echo 'Mode: ', $this->mode, " XDebTok: ", $response->headers->has('X-Debug-Token'), " IsRedir: ", $response->isRedirection(); die();і повідомте про це повернення.
Йіві

1
Додайте помилкову рядок (наприклад, "abc") у верхній частині "config / пакети / dev / web_profiler.yaml", щоб побачити, чи з’явилася помилка. Можливо, файл взагалі не читається.
Янній Botis

Відповіді:


7

Дуже важко, якщо не неможливо, віддалено налагодити це для вас. Точна проблема пов'язана з чимось конкретним у ваших локальних налаштуваннях, і хтось, хто не має доступу до вашого проекту, не мав би змоги побачити, що саме не так.

Деякі загальні та конкретні поради щодо усунення несправностей для вашої ситуації:

1-й. Перевстановіть пакет профілю

Хоча це незвично, установка може бути захищена. Переконайтесь, що ваш пакет профайлерів добре.

Спочатку вийміть його ( composer remove profiler), а потім встановіть його знову composer require --dev profiler:).

2-й. Перевірте конфігурацію

Використовуйте команду консолі Symfony для підтвердження своєї конфігурації.

Спочатку для вбудованого профілера:

$ bin/console debug:config framework profiler

Що має повернути щось подібне:

Current configuration for "framework.profiler"
==============================================

only_exceptions: false
enabled: true
collect: true
only_master_requests: false
dsn: 'file:%kernel.cache_dir%/profiler'

А потім для панелі інструментів профілера:

$ bin/console debug:config web_profiler

Що має повернути щось на кшталт:

Current configuration for extension with alias "web_profiler"
=============================================================

web_profiler:
    toolbar: true
    intercept_redirects: false
    excluded_ajax_paths: '^/((index|app(_[\w]+)?)\.php/)?_wdt'

3-й. Перевірте контейнер

Перевірте, як буде створена служба Profiler:

$ bin/console debug:container profiler --show-arguments

Очікуйте щось подібне:

Information for Service "profiler"
==================================

 Profiler.

 ---------------- -------------------------------------------------------------------------------------
  Option           Value
 ---------------- -------------------------------------------------------------------------------------
  Service ID       profiler
  Class            Symfony\Component\HttpKernel\Profiler\Profiler
  Tags             monolog.logger (channel: profiler)
                   kernel.reset (method: reset)
  Calls            add, add, add, add, add, add, add, add, add, add, add, add, add, add, add, add, add
  Public           yes
  Synthetic        no
  Lazy             no
  Shared           yes
  Abstract         no
  Autowired        no
  Autoconfigured   no
  Arguments        Service(profiler.storage)
                   Service(monolog.logger.profiler)
                   1
 ---------------- -------------------------------------------------------------------------------------

А потім для web_toolbar:

# bin/console debug:container web_profiler.debug_toolbar --show-arguments

Для чогось подібного:

Information for Service "web_profiler.debug_toolbar"
====================================================

 WebDebugToolbarListener injects the Web Debug Toolbar.

 ---------------- ------------------------------------------------------------------------
  Option           Value
 ---------------- ------------------------------------------------------------------------
  Service ID       web_profiler.debug_toolbar
  Class            Symfony\Bundle\WebProfilerBundle\EventListener\WebDebugToolbarListener
  Tags             kernel.event_subscriber
                   container.hot_path
  Public           no
  Synthetic        no
  Lazy             no
  Shared           yes
  Abstract         no
  Autowired        no
  Autoconfigured   no
  Arguments        Service(twig)

                   2
                   Service(router.default)
                   ^/((index|app(_[\w]+)?)\.php/)?_wdt
                   Service(web_profiler.csp.handler)
 ---------------- ------------------------------------------------------------------------

(Зверніть увагу на те 2, що включає панель інструментів).

4-й. Перевірте диспетчера події.

Під час kernel.responseподії вводиться панель інструментів веб-налагодження . Переконайтесь, що зворотний дзвінок належним чином підключений:

$ bin/console debug:event-dispatcher kernel.response

Що поверне щось подібне:

Registered Listeners for "kernel.response" Event
================================================

 ------- -------------------------------------------------------------------------------------------- ----------
  Order   Callable                                                                                     Priority
 ------- -------------------------------------------------------------------------------------------- ----------
  #1      ApiPlatform\Core\Hydra\EventListener\AddLinkHeaderListener::onKernelResponse()               0
  #2      Symfony\Component\HttpKernel\EventListener\ResponseListener::onKernelResponse()              0
  #3      Symfony\Component\HttpKernel\DataCollector\RequestDataCollector::onKernelResponse()          0
  #4      Symfony\Component\WebLink\EventListener\AddLinkHeaderListener::onKernelResponse()            0
  #5      Symfony\Component\Security\Http\RememberMe\ResponseListener::onKernelResponse()              0
  #6      ApiPlatform\Core\HttpCache\EventListener\AddHeadersListener::onKernelResponse()              -1
  #7      Symfony\Component\HttpKernel\EventListener\ProfilerListener::onKernelResponse()              -100
  #8      Symfony\Bundle\WebProfilerBundle\EventListener\WebDebugToolbarListener::onKernelResponse()   -128
  #9      Symfony\Component\HttpKernel\EventListener\TestSessionListener::onKernelResponse()           -128
  #10     Symfony\Component\HttpKernel\EventListener\DisallowRobotsIndexingListener::onResponse()      -255
  #11     Symfony\Component\HttpKernel\EventListener\SessionListener::onKernelResponse()               -1000
  #12     Symfony\Component\HttpKernel\EventListener\StreamedResponseListener::onKernelResponse()      -1024
 ------- -------------------------------------------------------------------------------------------- ----------

Помітьте елемент #7, який є колектором Profiler (який, крім усього іншого, буде містити X-Debug-Tokenзаголовок у відповідь, який згодом буде перевірено панеллю інструментів веб-налагодження, що є пунктом #8у наведеному вище списку.

Якщо будь-яка з перерахованих вище перевірок не вдається

Вам доведеться зосередитись на тій конкретній частині, щоб з’ясувати, чому вона не працює. Може, якийсь інший пучок заважає? Проблема з одним із файлів конфігурації?

Все перевіряється

... але все ще не працює? Ну, це дивно. Переконайтеся, що у вашому поверненому шаблоні є </body>тег та що повернута відповідь має text/htmlтип вмісту. Але якщо все вищезазначене перевіряє ... це має спрацювати.


У коментарі ви говорите, що framework.profiler.collectпри проведенні цих перевірок встановлено значення false.

Встановіть його як істинне, змінивши config/packages/dev/web_profiler.yamlтак:

framework:
    profiler:
        only_exceptions: false
        collect: true

3
Те, що виділялося, було: debug:config framework profilerповернутоcollect: false
Majo0od

Тому спробуйте додати конфігурацію framework.profiler.collectтак, що вона пише true.
Йіві

1
ВОНО ЖИВЕ!!! Нарешті! Зараз воно повернулося! Дякую за всю налагодження та допомогу !!!!
Majo0od

Хто знав, що одна лінія може зіпсувати все. Історично нам не потрібно було додавати, collect : trueякщо я правильно пам’ятаю? Це нове?
Majo0od

Дякую за всі ці кроки! Виявилось, я створив шаблон, який не розширював базу, тому насправді не повертався HTML / JavaScript, а лише відкритий текст.
Олександр Варвейк
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.