Thanh công cụ profiler của tôi không hiển thị trong symfony 4.3.1


9

Trong .envtệp của mình , tôi đã chỉ định môi trường ứng dụng của mình là dev và gỡ lỗi là đúng như vậy:

APP_ENV=dev
APP_DEBUG=true

Trong config/packages/dev/web_profiler.yamltập tin của tôi, tôi có những điều sau đây:

web_profiler:
    toolbar: true
    intercept_redirects: false

framework:
    profiler: { only_exceptions: false }

Định tuyến bên trong config/routes/dev/web_profiler.yamlcó vẻ ổn:

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

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

Vì vậy, khi tôi chạy máy chủ với symfony server:startmọi thứ đều ổn, nhưng trình hồ sơ không xuất hiện. Tôi có bỏ lỡ điều gì cho phép tính năng đó trong Symfony không?

Để làm rõ, trang này đang xuất ra một trang HTML phù hợp với nội dung phù hợp. Không có hồ sơ hiển thị.


Mẫu twig cơ sở của tôi:

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

Tường lửa 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!

Kết quả trên 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 

Bộ điều khiển trang chủ cuối cùng:

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

?>

Đã thêm công khai / 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);

Thực hiện một ctrl-u trong trình duyệt của bạn và xác minh rằng bạn có một trang html hiển thị. Thanh sẽ chỉ có mặt cho một trang thực tế.
Cerad

1
1. bạn có thể kiểm tra trong tab mạng của trình duyệt của mình (F12 trong ff và chrome), có thể một số tuyến _profiler đã được tải không? (nếu có, nó được tải nhưng vô hình). 2. là gói cấu hình web đang hoạt động, chạy bin/console debug:event-dispatcher kernel.responseở nơi có mức ưu tiên -128 nên có WebDebugToolbarListener::onKernelResponse. nếu không, hãy kiểm tra config / bundles.php, trong đó có chứa WebProfilerBundle. vâng
Jakumi

2
@ Majo0od nếu bạn thấy rằng các điều kiện trong dòng 102 khiến người nghe ngừng hoạt động, bạn đã cố gắng để có được điều đó hơn nữa? Mà một trong những điều kiện đánh giá true?
Nico Haase

1
Tạm thời sửa đổi WebDebugToolbarListener.php. Trên dòng 109 thêm điều này trước câu lệnh return: echo 'Mode: ', $this->mode, " XDebTok: ", $response->headers->has('X-Debug-Token'), " IsRedir: ", $response->isRedirection(); die();và báo cáo sự trở lại cho điều đó.
yivi

1
Thêm một số chuỗi không có thật (ví dụ "abc") ở đầu "config / gói / dev / web_profiler.yaml" để xem bạn có gặp lỗi không. Có lẽ các tập tin không được đọc ở tất cả.
Botann Jannes

Câu trả lời:


7

Rất khó, nếu không nói là không thể gỡ lỗi này cho bạn từ xa. Vấn đề chính xác được liên kết với một cái gì đó cụ thể trong thiết lập cục bộ của bạn và ai đó không có quyền truy cập vào dự án của bạn sẽ không có cơ hội để xem chính xác những gì sai.

Một số lời khuyên khắc phục sự cố chung và cụ thể cho tình huống của bạn:

1 Cài đặt lại gói profiler

Trong khi bất thường, việc cài đặt có thể được thực hiện. Hãy chắc chắn rằng gói profiler của bạn là ổn.

Đầu tiên xóa nó ( composer remove profiler), sau đó cài đặt lại composer require --dev profiler:).

lần 2. Kiểm tra cấu hình

Sử dụng lệnh console của Symfony để xác minh cấu hình của bạn.

Đầu tiên cho trình tạo hồ sơ tích hợp:

$ bin/console debug:config framework profiler

Mà nên trả lại một cái gì đó như thế này:

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

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

Và sau đó cho thanh công cụ profiler:

$ bin/console debug:config web_profiler

Mà sẽ trả lại một cái gì đó như:

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

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

lần thứ 3. Kiểm tra container

Kiểm tra cách dịch vụ Profiler sẽ được khởi tạo:

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

Mong đợi một cái gì đó như thế này:

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

Và sau đó cho web_toolbar:

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

Đối với một cái gì đó như thế này:

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

(Lưu ý 2, cho phép thanh công cụ).

lần thứ 4. Kiểm tra người điều phối sự kiện.

Thanh công cụ gỡ lỗi web được chèn trong kernel.responsesự kiện. Kiểm tra xem cuộc gọi lại có được nối thích hợp không:

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

Mà sẽ trả lại một cái gì đó như thế này:

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

Mục thông báo #7, là trình thu thập Profiler (trong số những thứ khác sẽ bao gồm X-Debug-Tokentiêu đề trong phản hồi, sẽ được kiểm tra sau bởi Thanh công cụ gỡ lỗi Web, là mục #8trong danh sách trên.

Nếu bất kỳ kiểm tra nào ở trên không thành công

Bạn sẽ phải tập trung vào phần cụ thể đó để tìm hiểu lý do tại sao nó thất bại. Có thể một số bó khác can thiệp? Một vấn đề với một trong các tập tin cấu hình?

Mọi thứ kiểm tra

... nhưng vẫn không hoạt động? Chà, thật lạ. Đảm bảo rằng mẫu được trả về của bạn có </body>thẻ và phản hồi được trả về có loại text/htmlnội dung. Nhưng nếu tất cả những điều trên kiểm tra ... nó sẽ hoạt động.


Trong một bình luận bạn nói rằng nó framework.profiler.collectđược đặt thành false khi thực hiện các kiểm tra này.

Đặt nó thành đúng bằng cách thay đổi config/packages/dev/web_profiler.yamlnhư thế này:

framework:
    profiler:
        only_exceptions: false
        collect: true

3
Điều nổi bật là: được debug:config framework profilertrả lạicollect: false
Majo0od

Vì vậy, hãy thử thêm cấu hình của framework.profiler.collectnó để nói true.
yivi

1
NÓ CÒN SỐNG!!! Cuối cùng! Nó đã trở lại! Cảm ơn bạn cho tất cả các gỡ lỗi và giúp đỡ !!!!
Majo0od

Ai biết một dòng duy nhất có thể làm rối tung mọi thứ. Trong lịch sử, chúng tôi không cần thêm collect : truenếu tôi nhớ chính xác? Đây có phải là mới không?
Majo0od

Cảm ơn tất cả các bước này! Hóa ra tôi đã tạo một mẫu không mở rộng cơ sở nên thực tế không trả về HTML / Javascript mà chỉ là bản rõ.
Alexander Varwijk
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.