symfony 4.3.1에 프로파일 러 도구 모음이 표시되지 않습니다


9

.env파일에서 앱 환경을 dev로 지정하고 다음과 같이 true로 디버그했습니다.

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

?>

추가 된 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);

브라우저에서 ctrl-u를 수행하고 html 페이지가 나타나는지 확인하십시오. 이 막대는 실제 페이지에만 표시됩니다.
Cerad

1
1. 브라우저의 네트워크 탭 (ff 및 chrome의 F12)에서 _profiler 경로가로드되었는지 확인할 수 있습니까? (예인 경우로드되었지만 보이지 않습니다). 2. 웹 프로파일 러 번들이 활성화 bin/console debug:event-dispatcher kernel.response되어 있으며 우선 순위가 -128 인 곳 에서 실행 해야합니다 WebDebugToolbarListener::onKernelResponse. 그렇지 않은 경우 WebProfilerBundle을 포함해야하는 config / bundles.php를 확인하십시오. 네.
Jakumi

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
"config / packages / dev / web_profiler.yaml"상단에 가짜 문자열 (예 : "abc")을 추가하여 오류가 있는지 확인하십시오. 파일이 전혀 읽히지 않았을 수 있습니다.
Jannes Botis 2018

답변:


7

불가능하지는 않지만 원격으로 디버깅하기는 매우 어렵습니다. 정확한 문제는 로컬 설정의 특정 문제와 관련이 있으며 프로젝트에 액세스 할 수없는 사람은 정확히 무엇이 잘못되었는지 볼 수 없습니다.

상황에 대한 몇 가지 일반적인 문제 해결 조언 :

1 일 프로파일 러 팩 재설치

드물지만 설치가 중단 될 수 있습니다. 프로파일 러 패키지가 올바른지 확인하십시오.

먼저 제거하고 ( 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'

셋째. 컨테이너 확인

프로파일 러 서비스가 어떻게 인스턴스화되는지 확인하십시오.

$ 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 도구 모음을 활성화하는을 ).

넷째. 이벤트 디스패처를 확인하십시오.

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프로파일 러 수집기 인 item 항목 ( X-Debug-Token응답에 헤더 가 포함되어 있으며 나중에 항목 인 Web Debug Toolbar로 확인 됨)#8 위 목록의 .

위의 검사 중 하나라도 실패하면

이유 를 찾으려면 해당 특정 부분에 집중해야합니다실패한 . 다른 번들이 방해가됩니까? 구성 파일 중 하나에 문제가 있습니까?

모든 것이 체크 아웃

...하지만 여전히 작동하지 않습니까? 글쎄, 그건 이상하다. 반환 된 템플릿에 </body>태그가 있고 반환 된 응답에 text/htmlcontent-type 이 있는지 확인하십시오 . 그러나 위의 체크 아웃의 모든 ...이 경우 해야 작동합니다.


의견에서 당신은 말한다 framework.profiler.collect 에서 이러한 검사를 수행 할 때 false로 설정되어 .

다음 config/packages/dev/web_profiler.yaml과 같이 변경하여 true로 설정하십시오 .

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.