La mia barra degli strumenti del profiler non viene visualizzata in symfony 4.3.1


9

Nel mio .envfile, ho specificato che l'ambiente della mia app è dev e il debug è vero in questo modo:

APP_ENV=dev
APP_DEBUG=true

Nel mio config/packages/dev/web_profiler.yamlfile ho il seguente:

web_profiler:
    toolbar: true
    intercept_redirects: false

framework:
    profiler: { only_exceptions: false }

Il routing all'interno config/routes/dev/web_profiler.yamlsembra andare bene:

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

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

Quindi, quando eseguo il server con symfony server:starttutto bene, ma il profiler non appare. Mi sono perso qualcosa che abilita quella funzione in Symfony?

Per chiarire, la pagina sta generando una pagina HTML corretta con il contenuto appropriato. Non c'è nessun profiler che si presenta.


Il mio modello di ramoscello di 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>

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!

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

Infine controller della homepage:

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

?>

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

Fai un ctrl-u nel tuo browser e verifica di avere una pagina html visualizzata. La barra sarà presente solo per una pagina effettiva.
Cerad,

1
1. puoi controllare nella scheda di rete del tuo browser (F12 in ff e chrome), che forse è stata caricata una route _profiler? (se sì, è caricato ma invisibile). 2. è attivo il bundle del profiler web, eseguito bin/console debug:event-dispatcher kernel.responsedove con priorità -128 dovrebbe esserci il WebDebugToolbarListener::onKernelResponse. in caso contrario, controlla config / bundles.php, che dovrebbe contenere WebProfilerBundle. si.
Jakumi

2
@ Majo0od se hai scoperto che le condizioni nella riga 102 fanno smettere di funzionare l'ascoltatore, cosa hai provato a ottenere ulteriormente? Quale di queste condizioni valuta true?
Nico Haase,

1
Modifica temporaneamente WebDebugToolbarListener.php. Alla riga 109 aggiungi questo prima dell'istruzione return: echo 'Mode: ', $this->mode, " XDebTok: ", $response->headers->has('X-Debug-Token'), " IsRedir: ", $response->isRedirection(); die();e segnala il reso per quello.
yivi,

1
Aggiungi una stringa fasulla (es. "Abc") nella parte superiore di "config / pacchetti / dev / web_profiler.yaml" per vedere se ricevi un errore. Forse il file non viene letto affatto.
Jannes Botis,

Risposte:


7

È molto difficile, se non impossibile, eseguire il debug per te in remoto. Il problema esatto è legato a qualcosa di specifico nella tua configurazione locale e qualcuno senza accesso al tuo progetto non avrebbe la possibilità di vedere esattamente cosa non va.

Alcuni consigli generali e specifici sulla risoluzione dei problemi per la tua situazione:

1 °. Reinstallare il pacchetto di profiler

Sebbene insolito, l'installazione potrebbe essere interrotta. Assicurati che il tuo pacchetto profiler sia a posto.

Prima rimuovilo ( composer remove profiler), quindi installalo di nuovo:) composer require --dev profiler.

2 °. Controlla la configurazione

Usa il comando della console di Symfony per verificare la tua configurazione.

Innanzitutto per il profiler integrato:

$ bin/console debug:config framework profiler

Che dovrebbe restituire qualcosa del genere:

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

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

E poi per la barra degli strumenti del profiler:

$ bin/console debug:config web_profiler

Che dovrebbe restituire qualcosa di simile:

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

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

3 °. Controlla il contenitore

Controlla come verrà istanziato il servizio Profiler:

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

Aspettati qualcosa del genere:

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

E poi per la web_toolbar:

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

Per qualcosa del genere:

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

(Nota 2, che abilita la barra degli strumenti).

4 °. Controlla il dispatcher di eventi.

La barra degli strumenti di debug Web viene iniettata durante l' kernel.responseevento. Verificare che il callback sia correttamente agganciato:

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

Che restituirà qualcosa del genere:

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

Notare l'elemento #7, che è il raccoglitore di Profiler (che tra le altre cose includerà l' X-Debug-Tokenintestazione nella risposta, che verrà successivamente controllata dalla barra di debug Web, che è l'elemento #8nell'elenco sopra.

Se uno dei suddetti controlli fallisce

Dovrai concentrarti su quella parte specifica per scoprire perché sta fallendo. Forse qualche altro bundle interferisce? Un problema con uno dei file di configurazione?

Tutto verifica

... ma ancora non funziona? Bene, è strano. Assicurarsi che il modello restituito abbia un </body>tag e che la risposta restituita abbia text/htmlun tipo di contenuto. Ma se tutto quanto sopra verifica ... dovrebbe funzionare.


In un commento dici che framework.profiler.collectè impostato su false quando si eseguono questi controlli.

Impostalo su true cambiando in config/packages/dev/web_profiler.yamlquesto modo:

framework:
    profiler:
        only_exceptions: false
        collect: true

3
La cosa che si distinse fu: debug:config framework profilertornòcollect: false
Majo0od

Quindi prova ad aggiungere la configurazione di framework.profiler.collectcosì dice true.
yivi,

1
È VIVA!!! Finalmente! Ora è tornato! Grazie per tutto il debug e l'aiuto !!!!
Majo0od

Chi sapeva che una sola riga poteva rovinare tutto. Storicamente non abbiamo avuto bisogno di aggiungere collect : truese ricordo bene? È nuovo?
Majo0od

Grazie per tutti questi passaggi! Alla fine ho creato un modello che non estendeva la base, quindi in realtà non restituiva HTML / Javascript ma solo testo in chiaro.
Alexander Varwijk,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.