Моя панель инструментов не отображается в symfony 4.3.1


9

В моем .envфайле я указал, что среда моего приложения - это dev, а debug - как true:

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-страница. Панель будет присутствовать только для реальной страницы.
Cerad

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();и сообщите об этом.
Yivi

1
Добавьте некоторую фиктивную строку (например, «abc») вверху «config / packages / dev / web_profiler.yaml», чтобы увидеть, если вы получаете ошибку. Может быть, файл не читается вообще.
Яннес Ботис

Ответы:


7

Очень трудно, если не невозможно, отладить это для вас удаленно. Точная проблема связана с чем-то конкретным в вашей локальной настройке, и у кого-то, не имеющего доступа к вашему проекту, не будет возможности точно понять, что не так.

Некоторые общие и конкретные советы по устранению неполадок в вашей ситуации:

Первый. Переустановите пакет профилировщика

В то время как необычный, установка могла быть сорвана. Убедитесь, что с вашим профилировщиком все в порядке.

Сначала удалите его ( composer remove profiler), а затем установите его снова:) composer require --dev profiler.

Второй. Проверьте конфигурацию

Используйте команду консоли 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'

Третий. Проверьте контейнер

Проверьте, как будет создан экземпляр службы 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, что включает панель инструментов).

Четвёртый. Проверьте диспетчер событий.

Панель инструментов веб-отладки внедряется во время 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, который является сборщиком профилировщика (который, помимо прочего, будет включать X-Debug-Tokenзаголовок в ответе, который позже будет проверен панелью инструментов веб-отладки, которая является элементом #8в приведенном выше листинге.

Если любая из вышеперечисленных проверок не проходит

Вы должны сосредоточиться на этой конкретной части, чтобы выяснить, почему она терпит неудачу. Может быть, какой-то другой пакет мешает? Проблема с одним из файлов конфигурации?

Все проверяется

... но все еще не работает? Ну, это странно. Убедитесь, что в вашем возвращенном шаблоне есть </body>тег и что возвращаемый ответ имеет text/htmlтип содержимого. Но если все вышеперечисленное подтвердится ... это должно сработать.


В комментарии вы говорите, что framework.profiler.collectустановлено значение false при выполнении этих проверок.

Установите значение true, изменив 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.
Yivi

1
ОНО ЖИВОЕ!!! В заключение! Теперь он вернулся! Спасибо за все отладки и помощь !!!!
Majo0od

Кто знал, что одна строка может все испортить. Исторически нам не нужно было добавлять, collect : trueесли я правильно помню? Это новое?
Majo0od

Спасибо за все эти шаги! Оказалось, что я создал шаблон, который не расширяет базу, поэтому фактически не возвращает HTML / Javascript, а только открытый текст.
Александр Варвийк
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.