Minha barra de ferramentas do profiler não está aparecendo no symfony 4.3.1

9

No meu .envarquivo, especifiquei meu ambiente de aplicativo como dev e depuração como true:

APP_ENV=dev
APP_DEBUG=true

No meu config/packages/dev/web_profiler.yamlarquivo, tenho o seguinte:

web_profiler:
    toolbar: true
    intercept_redirects: false

framework:
    profiler: { only_exceptions: false }

O roteamento interno config/routes/dev/web_profiler.yamlparece estar bem:

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

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

Então, quando eu executo o servidor, symfony server:starttudo está bem, mas o criador de perfil não aparece. Perdi algo que habilita esse recurso no Symfony?

Para esclarecer, a página está produzindo uma página HTML adequada com o conteúdo apropriado. Simplesmente não há perfilador aparecendo.


Meu modelo básico de galho:

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

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

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

Por fim, o controlador da página inicial:

<?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 adicionado:

<?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
fonte
Faça um ctrl-u no seu navegador e verifique se você tem uma página html aparecendo. A barra estará presente apenas para uma página real.
Cerad 28/10/19
11
1. você pode verificar na guia de rede do seu navegador (F12 em ff e chrome) que talvez alguma rota _profiler esteja carregada? (se sim, está carregado, mas invisível). 2. o pacote do criador de perfil da web está ativo, execute bin/console debug:event-dispatcher kernel.responseonde com prioridade -128 deve haver o WebDebugToolbarListener::onKernelResponse. caso contrário, verifique o arquivo config / bundles.php, que deve conter WebProfilerBundle. sim.
Jakumi 31/10/19
2
@ Majo0od Se você constatou que as condições na linha 102 fazem com que o ouvinte pare de funcionar, o que você tentou fazer para ir além? Qual dessas condições avalia true?
Nico Haase
11
Modifique temporariamente WebDebugToolbarListener.php. Na linha 109, adicione isso antes da declaração de retorno: echo 'Mode: ', $this->mode, " XDebTok: ", $response->headers->has('X-Debug-Token'), " IsRedir: ", $response->isRedirection(); die();e relate o retorno para isso.
yivi
11
Adicione alguma string falsa (por exemplo, "abc") na parte superior de "config / packages / dev / web_profiler.yaml" para ver se você recebeu um erro. Talvez o arquivo não seja lido.
Janes Botis

Respostas:

7

É muito difícil, se não impossível, depurar isso remotamente para você. O problema exato está relacionado a algo específico na sua configuração local e alguém sem acesso ao seu projeto não teria a chance de ver exatamente o que está errado.

Alguns conselhos gerais e específicos para solução de problemas para sua situação:

1º. Reinstale o pacote do profiler

Embora incomum, a instalação pode ser interrompida. Verifique se o seu pacote do profiler está correto.

Primeiro remova-o ( composer remove profiler) e, em seguida, instale-o novamente composer require --dev profiler:).

2nd. Verifique a configuração

Use o comando do console do Symfony para verificar sua configuração.

Primeiro para o criador de perfil incorporado:

$ bin/console debug:config framework profiler

O que deve retornar algo como isto:

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

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

E então para a barra de ferramentas do criador de perfil:

$ bin/console debug:config web_profiler

O que deve retornar algo como:

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

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

3rd. Verifique o contêiner

Verifique como o serviço Profiler será instanciado:

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

Espere algo como isto:

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 então para a web_toolbar:

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

Para algo assim:

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

(Observe o 2que habilita a barra de ferramentas).

4th. Verifique o distribuidor de eventos.

A barra de ferramentas de depuração da web é injetada durante o kernel.responseevento. Verifique se o retorno de chamada está conectado corretamente:

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

O que retornará algo como isto:

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

Item de aviso #7, que é o coletor do Profiler (que, entre outras coisas, incluirá o X-Debug-Tokencabeçalho na resposta, que será posteriormente verificado pela barra de ferramentas de depuração da Web, item #8da lista acima.

Se alguma das verificações acima falhar

Você precisará se concentrar nessa parte específica para descobrir por que está falhando. Talvez algum outro pacote esteja interferindo? Um problema com um dos arquivos de configuração?

Tudo dá uma olhada

... mas ainda não está funcionando? Bem, isso é estranho. Verifique se o modelo retornado possui uma </body>tag e se a resposta retornada possui text/htmlum tipo de conteúdo. Mas se todas as opções acima derem uma olhada ... deve funcionar.


Em um comentário, você diz que framework.profiler.collectestá definido como falso ao executar essas verificações.

Defina-o como true alterando config/packages/dev/web_profiler.yamlassim:

framework:
    profiler:
        only_exceptions: false
        collect: true
yivi
fonte
3
O que mais se destacou foi: debug:config framework profilerretornadocollect: false
Majo0od 14/11/19
Então tente adicionar a configuração do framework.profiler.collectque está escrito true.
yivi
11
ESTÁ VIVO!!! Finalmente! Agora voltou! Obrigado por toda a depuração e ajuda !!!!
Majo0od
Quem sabia que uma única linha poderia estragar tudo. Historicamente, não precisamos adicionar collect : truese me lembro corretamente? Isso é novo?
Majo0od
Obrigado por todas estas etapas! Acabei de criar um modelo que não estendia a base, por isso não estava retornando HTML / Javascript, mas apenas texto simples.
Alexander Varwijk em 15/03