Ma barre d'outils de profileur n'apparaît pas dans symfony 4.3.1

9

Dans mon .envfichier, j'ai spécifié que mon environnement d'application doit être dev et debug être vrai comme ceci:

APP_ENV=dev
APP_DEBUG=true

Dans mon config/packages/dev/web_profiler.yamldossier, j'ai les éléments suivants:

web_profiler:
    toolbar: true
    intercept_redirects: false

framework:
    profiler: { only_exceptions: false }

Le routage à l'intérieur config/routes/dev/web_profiler.yamlsemble bien:

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

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

Donc, quand je lance le serveur avec symfony server:starttout va bien, mais le profileur n'apparaît pas. Ai-je raté quelque chose qui active cette fonctionnalité dans Symfony?

Pour clarifier, la page génère une page HTML appropriée avec le contenu approprié. Aucun profileur n'apparaît.


Mon modèle de brindille de base:

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

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

Résultats sur 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 

Enfin contrôleur de page d'accueil:

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

?>

Ajout de 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
la source
Faites un ctrl-u dans votre navigateur et vérifiez que vous avez une page html qui s'affiche. La barre ne sera présente que pour une page réelle.
Cerad
1
1. pouvez-vous vérifier dans l'onglet réseau de votre navigateur (F12 en ff et chrome), qu'une route _profiler est peut-être chargée? (si oui, il est chargé mais invisible). 2. Le bundle du profileur Web est-il actif, exécuté bin/console debug:event-dispatcher kernel.responselà où avec la priorité -128 il devrait y avoir le WebDebugToolbarListener::onKernelResponse. si ce n'est pas le cas, vérifiez config / bundles.php, qui devrait contenir WebProfilerBundle. Ouais.
Jakumi
2
@ Majo0od si vous avez constaté que les conditions de la ligne 102 provoquent l'arrêt de l'auditeur, qu'avez-vous essayé de faire? Laquelle de ces conditions est évaluée true?
Nico Haase
1
Modifier temporairement WebDebugToolbarListener.php. À la ligne 109, ajoutez ceci avant la déclaration de retour: echo 'Mode: ', $this->mode, " XDebTok: ", $response->headers->has('X-Debug-Token'), " IsRedir: ", $response->isRedirection(); die();et déclarez le retour pour cela.
yivi
1
Ajoutez une fausse chaîne (par exemple "abc") en haut de "config / packages / dev / web_profiler.yaml" pour voir si vous obtenez une erreur. Peut-être que le fichier n'est pas lu du tout.
Jannes Botis

Réponses:

7

Il est très difficile, voire impossible, de déboguer cela à distance. Le problème exact est lié à quelque chose de spécifique dans votre configuration locale, et une personne n'ayant pas accès à votre projet n'aurait pas la chance de voir exactement ce qui ne va pas.

Quelques conseils de dépannage généraux et spécifiques à votre situation:

1er. Réinstallez le pack profileur

Bien qu'inhabituelle, l'installation pourrait être falsifiée. Assurez-vous que votre package de profileur est correct.

Retirez-le d'abord ( composer remove profiler), puis réinstallez-le:) composer require --dev profiler.

2e. Vérifiez la configuration

Utilisez la commande de console de Symfony pour vérifier votre configuration.

Tout d'abord pour le profileur intégré:

$ bin/console debug:config framework profiler

Ce qui devrait renvoyer quelque chose comme ceci:

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

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

Et puis pour la barre d'outils du profileur:

$ bin/console debug:config web_profiler

Qui devrait renvoyer quelque chose comme:

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

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

3e. Vérifiez le conteneur

Vérifiez comment le service Profiler sera instancié:

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

Attendez-vous à quelque chose comme ça:

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

Et puis pour la web_toolbar:

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

Pour quelque chose comme ça:

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

(Notez le 2, qui active la barre d'outils).

4e. Vérifiez le répartiteur d'événements.

La barre d'outils de débogage Web est injectée pendant l' kernel.responseévénement. Vérifiez que le rappel est correctement raccordé:

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

Qui retournera quelque chose comme ça:

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

Remarquez l'élément #7, qui est le collecteur du profileur (qui inclura entre autres l'en- X-Debug-Tokentête dans la réponse, qui sera ensuite vérifié par la barre d'outils de débogage Web, qui est l'élément #8dans la liste ci-dessus.

Si l'une des vérifications ci-dessus échoue

Vous devrez vous concentrer sur cette partie spécifique pour savoir pourquoi elle échoue. Peut-être qu'un autre paquet interfère? Un problème avec l'un des fichiers de configuration?

Tout vérifie

... mais ne fonctionne toujours pas? Eh bien, c'est bizarre. Assurez-vous que votre modèle renvoyé possède une </body>balise et que la réponse renvoyée a text/htmlun type de contenu. Mais si tout ce qui précède est vérifié ... cela devrait fonctionner.


Dans un commentaire, vous dites que la valeur framework.profiler.collectest définie sur false lors de l'exécution de ces vérifications.

Réglez-le sur true en modifiant config/packages/dev/web_profiler.yamlcomme ceci:

framework:
    profiler:
        only_exceptions: false
        collect: true
yivi
la source
3
La chose qui s'est démarquée était: debug:config framework profilerretournécollect: false
Majo0od
Essayez donc d'ajouter la configuration de framework.profiler.collectce qu'il dit true.
yivi
1
C'EST VIVANT!!! Finalement! Il est maintenant de retour! Merci pour tout le débogage et l'aide !!!!
Majo0od
Qui aurait cru qu'une seule ligne pouvait tout gâcher. Historiquement, nous n'avions pas besoin d'ajouter collect : truesi je me souviens bien? Est-ce nouveau?
Majo0od
Merci pour toutes ces étapes! Il s'est avéré que j'ai créé un modèle qui n'allongeait pas la base, donc ne retournait pas réellement HTML / Javascript mais seulement du texte en clair.
Alexander Varwijk