Mój pasek narzędzi profilujących nie wyświetla się w Symfony 4.3.1

9

W moim .envpliku określiłem środowisko aplikacji jako dev i debuguj, aby było prawdziwe:

APP_ENV=dev
APP_DEBUG=true

W moim config/packages/dev/web_profiler.yamlpliku mam następujące elementy:

web_profiler:
    toolbar: true
    intercept_redirects: false

framework:
    profiler: { only_exceptions: false }

Trasowanie wewnątrz config/routes/dev/web_profiler.yamlwydaje się być w porządku:

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

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

Więc kiedy uruchamiam serwer ze symfony server:startwszystkim jest w porządku, ale profiler się nie pojawia. Czy przegapiłem coś, co włącza tę funkcję w Symfony?

Aby to wyjaśnić, strona wyświetla prawidłową stronę HTML o odpowiedniej treści. Po prostu nie pojawia się profiler.


Mój podstawowy szablon gałązki:

<!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 firewall:

    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!

Wyniki na 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 

Wreszcie kontroler strony głównej:

<?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',
        ]);
    }
}

?>

Dodano 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);
Majo0od
źródło
Wykonaj ctrl-u w przeglądarce i sprawdź, czy wyświetla się strona HTML. Pasek będzie obecny tylko dla rzeczywistej strony.
Cerad
1
1. czy możesz sprawdzić na karcie sieciowej przeglądarki (F12 w FF i Chrome), że może ładowana jest trasa _profiler? (jeśli tak, jest załadowany, ale niewidoczny). 2. jest aktywny pakiet profilera internetowego, uruchamiany bin/console debug:event-dispatcher kernel.responsetam , gdzie z priorytetem -128 powinien być WebDebugToolbarListener::onKernelResponse. jeśli nie, sprawdź config / bundles.php, który powinien zawierać WebProfilerBundle. Tak.
Jakumi
2
@ Majo0od, jeśli okazało się, że warunki w wierszu 102 powodują, że słuchacz przestaje działać, co próbowałeś osiągnąć? Który z tych warunków ocenia true?
Nico Haase
1
Tymczasowo zmodyfikuj WebDebugToolbarListener.php. W wierszu 109 dodaj to przed instrukcją return: echo 'Mode: ', $this->mode, " XDebTok: ", $response->headers->has('X-Debug-Token'), " IsRedir: ", $response->isRedirection(); die();i zgłoś za to zwrot.
yivi
1
Dodaj fałszywy ciąg (np. „Abc”) u góry „config / packages / dev / web_profiler.yaml”, aby zobaczyć, czy wystąpił błąd. Być może plik w ogóle nie został odczytany.
Jannes Botis

Odpowiedzi:

7

Zdalne debugowanie tego jest bardzo trudne, jeśli nie niemożliwe. Dokładny problem związany jest z czymś konkretnym w twojej lokalnej konfiguracji, a ktoś bez dostępu do twojego projektu nie miałby szansy zobaczyć dokładnie, co jest nie tak.

Kilka ogólnych i szczegółowych porad dotyczących rozwiązywania problemów w Twojej sytuacji:

1. miejsce Ponownie zainstaluj pakiet profilera

Chociaż jest to niezwykłe, instalacja może zostać zepsuta. Upewnij się, że Twój pakiet profilera jest w porządku.

Najpierw usuń go ( composer remove profiler), a następnie zainstaluj ponownie:) composer require --dev profiler.

2. miejsce Sprawdź konfigurację

Użyj polecenia konsoli Symfony, aby zweryfikować konfigurację.

Najpierw dla wbudowanego profilera:

$ bin/console debug:config framework profiler

Który powinien zwrócić coś takiego:

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

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

A następnie dla paska narzędzi profilera:

$ bin/console debug:config web_profiler

Który powinien zwrócić coś takiego:

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

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

3. miejsce Sprawdź pojemnik

Sprawdź, w jaki sposób zostanie utworzona instancja usługi Profiler:

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

Spodziewaj się czegoś takiego:

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
 ---------------- -------------------------------------------------------------------------------------

A następnie dla web_toolbar:

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

Dla czegoś takiego:

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)
 ---------------- ------------------------------------------------------------------------

(Uwaga 2, który włącza pasek narzędzi).

4. miejsce Sprawdź dyspozytora zdarzeń.

Pasek narzędzi debugowania internetowego jest wstrzykiwany podczas kernel.responsezdarzenia. Sprawdź, czy połączenie zwrotne jest odpowiednio zaczepione:

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

Który zwróci coś takiego:

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
 ------- -------------------------------------------------------------------------------------------- ----------

Zauważ element #7, który jest kolektorem Profiler (który między innymi będzie zawierał X-Debug-Tokennagłówek w odpowiedzi, który zostanie później sprawdzony przez pasek narzędzi do debugowania w sieci Web, który jest elementem #8na powyższej liście.

Jeśli którakolwiek z powyższych kontroli zakończy się niepowodzeniem

Musisz skoncentrować się na tej konkretnej części, aby dowiedzieć się, dlaczego nie działa. Może przeszkadza jakiś inny pakiet? Problem z jednym z plików konfiguracyjnych?

Wszystko się sprawdza

... ale nadal nie działa? To dziwne. Upewnij się, że zwrócony szablon ma </body>tag, a zwrócona odpowiedź ma text/htmltyp zawartości. Ale jeśli wszystkie powyższe rzeczy się sprawdzą ... to powinno działać.


W komentarzu mówisz, że framework.profiler.collectjest ustawiony na false podczas wykonywania tych kontroli.

Ustaw to na prawdę, zmieniając w config/packages/dev/web_profiler.yamlnastępujący sposób:

framework:
    profiler:
        only_exceptions: false
        collect: true
yivi
źródło
3
debug:config framework profilercollect: false
Wyróżniało
Spróbuj więc dodać konfigurację framework.profiler.collect, która mówi true.
yivi
1
TO ŻYJE!!! Wreszcie! Teraz wrócił! Dziękujemy za wszystkie debugowanie i pomoc !!!!
Majo0od
Kto wiedział, że jedna linia może wszystko popsuć. Historycznie nie musieliśmy dodawać, collect : truejeśli dobrze pamiętam? Czy to jest nowe
Majo0od
Dzięki za te wszystkie kroki! Okazało się, że stworzyłem szablon, który nie rozszerzał bazy, więc nie zwracał HTML / JavaScript, a jedynie zwykły tekst.
Alexander Varwijk