แถบเครื่องมือตัวสร้างโปรไฟล์ของฉันไม่แสดงขึ้นใน symfony 4.3.1


9

ใน.envไฟล์ของฉันฉันได้ระบุสภาพแวดล้อมแอพของฉันเป็น dev และดีบักให้เป็นจริงเช่นนั้น:

APP_ENV=dev
APP_DEBUG=true

ในconfig/packages/dev/web_profiler.yamlไฟล์ของฉันฉันมีดังต่อไปนี้:

web_profiler:
    toolbar: true
    intercept_redirects: false

framework:
    profiler: { only_exceptions: false }

เส้นทางภายในconfig/routes/dev/web_profiler.yamlดูเหมือนจะไม่เป็นไร:

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

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

ดังนั้นเมื่อฉันเรียกใช้เซิร์ฟเวอร์โดยที่symfony server:startทุกอย่างเรียบร้อยดี แต่ตัวสร้างโปรไฟล์ไม่ปรากฏขึ้น ฉันพลาดสิ่งที่ทำให้ฟีเจอร์นั้นภายใน Symfony หรือไม่?

เพื่อชี้แจงหน้ากำลังแสดงผลหน้า HTML ที่เหมาะสมกับเนื้อหาที่เหมาะสม มีเพียงผู้สร้างโปรไฟล์ที่ไม่ปรากฏขึ้น


แม่แบบกิ่งไม้ฐานของฉัน:

<!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 ไฟร์วอลล์:

    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!

ผลลัพธ์เมื่อ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 

ตัวควบคุมโฮมเพจล่าสุด:

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

?>

เพิ่มสาธารณะ / 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);

ทำ ctrl-u ในเบราว์เซอร์ของคุณและตรวจสอบว่าคุณมีหน้า html ปรากฏขึ้น แถบจะปรากฏสำหรับหน้าจริงเท่านั้น
Cerad

1
1. คุณสามารถตรวจสอบในแท็บเครือข่ายของเบราว์เซอร์ของคุณ (F12 ใน ff และโครเมียม) ซึ่งอาจมีการโหลดเส้นทาง _profiler บางเส้นทางหรือไม่ (ถ้าใช่มันโหลด แต่มองไม่เห็น) 2. เป็น Profiler เว็บกำปราดเปรียว, ทำงานbin/console debug:event-dispatcher kernel.responseที่มีความสำคัญ -128 WebDebugToolbarListener::onKernelResponseควรมี หากไม่ใช่ให้ตรวจสอบ config / bundles.php ซึ่งควรมี WebProfilerBundle ใช่.
จากุมิ

2
@ Majo0od หากคุณพบว่าเงื่อนไขในบรรทัดที่ 102 ทำให้ผู้ฟังหยุดทำงานคุณได้ลองทำอะไรต่อไป ซึ่งหนึ่งในเงื่อนไขเหล่านี้ประเมินtrue?
Nico Haase

1
WebDebugToolbarListener.phpแก้ไขชั่วคราว ที่บรรทัดที่ 109 ให้เพิ่มสิ่งนี้ก่อนคำสั่ง return: echo 'Mode: ', $this->mode, " XDebTok: ", $response->headers->has('X-Debug-Token'), " IsRedir: ", $response->isRedirection(); die();และรายงานการคืนค่านั้น
yivi

1
เพิ่มสตริงปลอม (เช่น "abc") ที่ด้านบนของ "config / packages / dev / web_profiler.yaml" เพื่อดูว่าคุณได้รับข้อผิดพลาดหรือไม่ อาจจะอ่านไฟล์ไม่ได้เลย
Jannes Botis

คำตอบ:


7

มันยากมากถ้าไม่ใช่เป็นไปไม่ได้ที่จะแก้ไขข้อบกพร่องนี้จากระยะไกล ปัญหาที่แน่นอนนั้นเชื่อมโยงกับบางสิ่งที่เฉพาะเจาะจงในการตั้งค่าในพื้นที่ของคุณและบางคนที่ไม่สามารถเข้าถึงโครงการของคุณจะไม่มีโอกาสได้เห็นสิ่งที่ผิด

คำแนะนำการแก้ปัญหาทั่วไปและเฉพาะสำหรับสถานการณ์ของคุณ:

1 ติดตั้ง profiler pack อีกครั้ง

ในขณะที่ผิดปกติการติดตั้งอาจถูกบอร์ ตรวจสอบให้แน่ใจว่าแพ็คเกจ profiler ของคุณใช้ได้

ก่อนอื่นให้ลบ ( composer remove profiler) แล้วติดตั้งอีกครั้ง:composer require --dev profiler )

ครั้งที่ 2 ตรวจสอบการกำหนดค่า

ใช้คำสั่งคอนโซลของ Symfony เพื่อตรวจสอบการกำหนดค่าของคุณ

ที่หนึ่งสำหรับผู้สร้างโปรไฟล์ในตัว:

$ bin/console debug:config framework profiler

ซึ่งควรส่งคืนสิ่งนี้:

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

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

และสำหรับแถบเครื่องมือตัวสร้างโปรไฟล์:

$ bin/console debug:config web_profiler

ซึ่งควรส่งคืนสิ่งที่ชอบ:

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

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

3 ตรวจสอบภาชนะบรรจุ

ตรวจสอบว่าจะให้บริการโปรไฟล์ของอินสแตนซ์ได้อย่างไร:

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

คาดหวังสิ่งนี้:

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

และสำหรับ web_toolbar:

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

สำหรับสิ่งนี้:

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

(หมายเหตุ 2ซึ่งเปิดใช้งานแถบเครื่องมือ)

4 ตรวจสอบโปรแกรมเลือกจ่ายงานเหตุการณ์

แถบเครื่องมือดีบั๊กเว็บถูกฉีดระหว่างkernel.responseกิจกรรม ตรวจสอบว่าได้รับการติดต่อกลับอย่างเหมาะสม:

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

ซึ่งจะส่งคืนสิ่งนี้:

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

รายการประกาศ#7ซึ่งเป็นตัวรวบรวม Profiler (ซึ่งรวมถึงX-Debug-Tokenส่วนอื่น ๆ จะรวมส่วนหัวในการตอบกลับซึ่งจะถูกตรวจสอบในภายหลังโดยแถบเครื่องมือ Debug เว็บซึ่งเป็นรายการ#8ในด้านบน

หากการตรวจสอบใด ๆ ข้างต้นล้มเหลว

คุณจะต้องมุ่งเน้นเฉพาะส่วนนั้นเพื่อหาสาเหตุมันล้มเหลว อาจมีกลุ่มอื่นรบกวน มีปัญหากับหนึ่งในไฟล์การกำหนดค่าหรือไม่?

ทุกอย่างเช็คเอาท์

... แต่ยังไม่ทำงานใช่ไหม นั่นมันแปลกดี ตรวจสอบให้แน่ใจว่าเทมเพลตที่ส่งคืนมี</body>แท็กและการตอบกลับที่ส่งคืนนั้นมีtext/htmlประเภทเนื้อหา แต่ถ้าทั้งหมดข้างต้นเช็คเอาท์ ... มันควรจะทำงาน


ในความคิดเห็นที่คุณพูดว่า framework.profiler.collectถูกตั้งค่าเป็นเท็จเมื่อทำการตรวจสอบเหล่านี้

ตั้งค่าเป็นจริงโดยเปลี่ยนconfig/packages/dev/web_profiler.yamlเช่นนี้:

framework:
    profiler:
        only_exceptions: false
        collect: true

3
สิ่งที่โดดเด่นคือ: debug:config framework profilerกลับมาcollect: false
Majo0od

ดังนั้นลองเพิ่มการกำหนดค่าของดังนั้นจึงกล่าวว่าframework.profiler.collect true
yivi

1
ยังมีชีวิตอยู่ !!! ที่สุด! ตอนนี้กลับมาแล้ว! ขอบคุณสำหรับการดีบักและช่วย !!!!
Majo0od

ใครจะรู้ว่าบรรทัดเดียวจะทำให้ทุกอย่างยุ่ง ในอดีตเราไม่จำเป็นต้องเพิ่มcollect : trueถ้าฉันจำได้ถูกต้อง? มันใหม่หรือไม่?
Majo0od

ขอบคุณสำหรับทุกขั้นตอนเหล่านี้! กลับกลายเป็นว่าฉันสร้างเทมเพลตที่ไม่ได้ขยายฐานดังนั้นจริง ๆ แล้วไม่ได้ส่งคืน HTML / Javascript แต่ธรรมดาเท่านั้น
Alexander Varwijk
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.