Meine Profiler-Symbolleiste wird in Symfony 4.3.1 nicht angezeigt


9

In meiner .envDatei habe ich meine App-Umgebung als dev und debug als true angegeben:

APP_ENV=dev
APP_DEBUG=true

In meiner config/packages/dev/web_profiler.yamlDatei habe ich Folgendes:

web_profiler:
    toolbar: true
    intercept_redirects: false

framework:
    profiler: { only_exceptions: false }

Das Routing innerhalb config/routes/dev/web_profiler.yamlscheint in Ordnung zu sein:

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

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

Wenn ich also den Server mit symfony server:startallem starte, ist alles in Ordnung, aber der Profiler wird nicht angezeigt. Habe ich etwas verpasst, das diese Funktion in Symfony aktiviert?

Zur Verdeutlichung gibt die Seite eine richtige HTML-Seite mit dem entsprechenden Inhalt aus. Es wird einfach kein Profiler angezeigt.


Meine Basiszweigvorlage:

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

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

Zuletzt Homepage-Controller:

<?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 hinzugefügt:

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

Führen Sie in Ihrem Browser eine Strg-U-Taste aus und vergewissern Sie sich, dass eine HTML-Seite angezeigt wird. Die Leiste ist nur für eine aktuelle Seite vorhanden.
Cerad

1
1. Können Sie auf der Registerkarte "Netzwerk" Ihres Browsers (F12 in ff und Chrome) überprüfen, ob möglicherweise eine _profiler-Route geladen ist? (Wenn ja, ist es geladen, aber unsichtbar). 2. Ist das Web-Profiler-Bundle aktiv, führen Sie es bin/console debug:event-dispatcher kernel.responsemit der Priorität -128 aus WebDebugToolbarListener::onKernelResponse. Ist dies nicht der Fall, überprüfen Sie config / bundles.php, die WebProfilerBundle enthalten sollte. Ja.
Jakumi

2
@ Majo0od Wenn Sie festgestellt haben, dass die Bedingungen in Zeile 102 dazu führen, dass der Hörer nicht mehr funktioniert, was haben Sie versucht, um das weiter zu bringen? Zu welcher dieser Bedingungen wird bewertet true?
Nico Haase

1
Zeitlich ändern WebDebugToolbarListener.php. Fügen Sie dies in Zeile 109 vor der return-Anweisung hinzu: echo 'Mode: ', $this->mode, " XDebTok: ", $response->headers->has('X-Debug-Token'), " IsRedir: ", $response->isRedirection(); die();und melden Sie die Rückgabe dafür.
Yivi

1
Fügen Sie oben in "config / packages / dev / web_profiler.yaml" eine falsche Zeichenfolge (z. B. "abc") hinzu, um festzustellen, ob eine Fehlermeldung angezeigt wird. Möglicherweise wird die Datei überhaupt nicht gelesen.
Jannes Botis

Antworten:


7

Es ist sehr schwierig, wenn nicht unmöglich, dies aus der Ferne für Sie zu debuggen. Das genaue Problem hängt mit etwas Bestimmtem in Ihrem lokalen Setup zusammen, und jemand ohne Zugriff auf Ihr Projekt hätte keine Chance, genau zu sehen, was falsch ist.

Einige allgemeine und spezifische Ratschläge zur Fehlerbehebung für Ihre Situation:

1. Installieren Sie das Profiler Pack neu

Obwohl ungewöhnlich, könnte die Installation verzerrt sein. Stellen Sie sicher, dass Ihr Profiler-Paket in Ordnung ist.

Entfernen Sie es zuerst ( composer remove profiler) und installieren Sie es dann erneut :) composer require --dev profiler.

2 .. Überprüfen Sie die Konfiguration

Verwenden Sie den Konsolenbefehl von Symfony, um Ihre Konfiguration zu überprüfen.

Zuerst für den eingebauten Profiler:

$ bin/console debug:config framework profiler

Welches sollte so etwas zurückgeben:

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

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

Und dann zur Profiler-Symbolleiste:

$ bin/console debug:config web_profiler

Welches sollte etwas zurückgeben wie:

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

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

3 .. Überprüfen Sie den Behälter

Überprüfen Sie, wie der Profiler-Service instanziiert wird:

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

Erwarten Sie so etwas:

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

Und dann für die web_toolbar:

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

Für so etwas:

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

(Beachten Sie die 2, die die Symbolleiste aktiviert).

4 .. Überprüfen Sie den Ereignis-Dispatcher.

Die Web-Debug-Symbolleiste wird während des kernel.responseEreignisses eingefügt . Überprüfen Sie, ob der Rückruf ordnungsgemäß angeschlossen ist:

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

Welches wird so etwas zurückgeben:

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

Hinweiselement #7, bei dem es sich um den Profiler-Kollektor handelt (der unter anderem den X-Debug-TokenHeader in der Antwort enthält, der später von der Web-Debug-Symbolleiste überprüft wird, die #8in der obigen Liste enthalten ist.

Wenn eine der oben genannten Prüfungen fehlschlägt

Sie müssen sich auf diesen bestimmten Teil konzentrieren, um herauszufinden, warum er fehlschlägt. Vielleicht stört ein anderes Bündel? Ein Problem mit einer der Konfigurationsdateien?

Alles checkt aus

... aber immer noch nicht funktioniert? Das ist komisch. Stellen Sie sicher, dass Ihre zurückgegebene Vorlage ein </body>Tag enthält und dass die zurückgegebene Antwort vom text/htmlInhaltstyp ist. Aber wenn alle oben genannten Punkte überprüft werden ... sollte es funktionieren.


In einem Kommentar sagen Sie, dass framework.profiler.collectdieser Wert bei diesen Überprüfungen auf false gesetzt ist.

Setzen Sie es auf true, indem Sie Folgendes ändern config/packages/dev/web_profiler.yaml:

framework:
    profiler:
        only_exceptions: false
        collect: true

3
Das, was debug:config framework profilercollect: false
auffiel

Versuchen Sie also, die Konfiguration von framework.profiler.collectso hinzuzufügen , wie es heißt true.
Yivi

1
ES LEBT!!! Schließlich! Es ist jetzt zurückgekommen! Vielen Dank für all das Debuggen und die Hilfe!
Majo0od

Wer wusste, dass eine einzige Zeile alles durcheinander bringen könnte. Historisch mussten wir nicht hinzufügen, collect : truewenn ich mich richtig erinnere? Ist das neu
Majo0od

Danke für all diese Schritte! Es stellte sich heraus, dass ich eine Vorlage erstellt habe, die die Basis nicht erweitert, also nicht HTML / Javascript zurückgibt, sondern nur Klartext.
Alexander Varwijk
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.