Toolbar profiler saya tidak muncul di symfony 4.3.1

9

Dalam .envfile saya , saya telah menetapkan lingkungan aplikasi saya sebagai dev dan debug benar seperti:

APP_ENV=dev
APP_DEBUG=true

Dalam config/packages/dev/web_profiler.yamlfile saya, saya memiliki yang berikut ini:

web_profiler:
    toolbar: true
    intercept_redirects: false

framework:
    profiler: { only_exceptions: false }

Routing di dalam config/routes/dev/web_profiler.yamlsepertinya baik-baik saja:

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

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

Jadi ketika saya menjalankan server dengan symfony server:start semuanya baik-baik saja, tetapi profiler tidak muncul. Apakah saya melewatkan sesuatu yang mengaktifkan fitur itu di dalam Symfony?

Untuk memperjelas, halaman mengeluarkan halaman HTML yang tepat dengan konten yang sesuai. Tidak ada profiler yang muncul.


Templat ranting basis saya:

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

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

Pengontrol beranda terakhir:

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

?>

Menambahkan 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
sumber
Lakukan ctrl-u di browser Anda dan pastikan Anda memiliki halaman html yang muncul. Bilah hanya akan ada untuk halaman yang sebenarnya.
Cerad
1
1. dapatkah Anda memeriksa di tab jaringan browser Anda (F12 dalam ff dan chrome), bahwa mungkin beberapa rute _profiler dimuat? (jika ya, itu dimuat tetapi tidak terlihat). 2. adalah bundel profiler web aktif, jalankan di bin/console debug:event-dispatcher kernel.responsemana dengan -128 prioritas harus ada WebDebugToolbarListener::onKernelResponse. jika tidak, periksa config / bundles.php, yang seharusnya berisi WebProfilerBundle. ya.
Jakumi
2
@ Majo0od jika Anda menemukan bahwa kondisi pada baris 102 menyebabkan pendengar berhenti bekerja, apa yang sudah Anda coba selesaikan lebih lanjut? Ke manakah kondisi ini dievaluasi true?
Nico Haase
1
Modifikasi sementara WebDebugToolbarListener.php. Pada baris 109 tambahkan ini sebelum pernyataan pengembalian: echo 'Mode: ', $this->mode, " XDebTok: ", $response->headers->has('X-Debug-Token'), " IsRedir: ", $response->isRedirection(); die();dan laporkan pengembalian untuk itu.
yivi
1
Tambahkan beberapa string palsu (mis. "Abc") di bagian atas "config / packages / dev / web_profiler.yaml" untuk melihat apakah Anda mendapatkan kesalahan. Mungkin file tidak dibaca sama sekali.
Jannes Botis

Jawaban:

7

Sangat sulit, jika bukan tidak mungkin, men-debug ini untuk Anda dari jarak jauh. Masalah yang pasti terkait dengan sesuatu yang spesifik di pengaturan lokal Anda, dan seseorang tanpa akses ke proyek Anda tidak akan memiliki kesempatan untuk melihat apa yang salah.

Beberapa saran pemecahan masalah umum dan khusus untuk situasi Anda:

1 Instal ulang paket profiler

Meskipun tidak biasa, instalasi bisa borked. Pastikan paket profiler Anda baik-baik saja.

Pertama-tama hapus ( composer remove profiler), lalu pasang kembali composer require --dev profiler:).

Ke-2 Periksa konfigurasi

Gunakan perintah konsol Symfony untuk memverifikasi konfigurasi Anda.

Pertama untuk profiler bawaan:

$ bin/console debug:config framework profiler

Yang seharusnya mengembalikan sesuatu seperti ini:

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

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

Dan kemudian untuk bilah alat profiler:

$ bin/console debug:config web_profiler

Yang seharusnya mengembalikan sesuatu seperti:

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

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

Ke-3 Periksa wadahnya

Periksa bagaimana layanan Profiler akan dipakai:

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

Harapkan sesuatu seperti ini:

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

Dan kemudian untuk web_toolbar:

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

Untuk sesuatu seperti ini:

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

(Perhatikan 2, yang mengaktifkan bilah alat).

4 Periksa pengirim acara.

Bilah alat web debug disuntikkan selama kernel.responseacara. Periksa apakah callback terhubung dengan benar:

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

Yang akan mengembalikan sesuatu seperti ini:

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 pemberitahuan #7, yang merupakan kolektor Profiler (yang antara lain akan menyertakan X-Debug-Tokenheader dalam respons, yang nantinya akan diperiksa oleh Web Debug Toolbar, yang merupakan item #8dalam daftar di atas.

Jika salah satu dari pemeriksaan di atas gagal

Anda harus fokus pada bagian tertentu untuk mencari tahu mengapa itu gagal. Mungkin beberapa bundel lain mengganggu? Masalah dengan salah satu file konfigurasi?

Semuanya memeriksa

... tapi masih tidak berfungsi? Nah, itu aneh. Pastikan templat yang dikembalikan memiliki </body>tag, dan respons yang dikembalikan memiliki text/htmltipe konten. Tetapi jika semua hal di atas memeriksa ... itu akan berhasil.


Dalam komentar Anda mengatakan bahwa framework.profiler.collectdisetel ke false saat melakukan pemeriksaan ini.

Setel ke true dengan mengubah config/packages/dev/web_profiler.yamlseperti ini:

framework:
    profiler:
        only_exceptions: false
        collect: true
yivi
sumber
3
Hal yang menonjol adalah: debug:config framework profilerdikembalikancollect: false
Majo0od
Jadi coba tambahkan konfigurasi framework.profiler.collectbegitu katanya true.
yivi
1
INI HIDUP!!! Akhirnya! Sekarang telah kembali! Terima kasih atas semua debugging dan bantuannya !!!!
Majo0od
Siapa tahu satu baris bisa mengacaukan segalanya. Secara historis kami tidak perlu menambahkan collect : truejika saya ingat dengan benar? Apakah ini baru?
Majo0od
Terima kasih untuk semua langkah ini! Ternyata saya membuat template yang tidak memperluas basis sehingga tidak benar-benar mengembalikan HTML / Javascript tetapi hanya plaintext.
Alexander Varwijk