プロファイラーのツールバーがsymfony 4.3.1に表示されません


9

私の.envファイルでは、次のようにアプリ環境をdevに、debugを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

回答:


7

これをリモートでデバッグすることは、不可能ではないにしても非常に困難です。正確な問題はローカルセットアップの特定の問題に関連しており、プロジェクトにアクセスできないユーザーは、何が問題なのかを正確に知る機会がありません。

状況に応じた一般的で具体的なトラブルシューティングのアドバイス:

第一。プロファイラーパックを再インストールする

異常ではありますが、インストールが失敗する可能性があります。プロファイラーパッケージに問題がないことを確認してください。

最初にそれを削除し(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イベント中にWebデバッグツールバーが挿入されます。コールバックが適切にフックされていることを確認します。

$ 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は、応答にヘッダーが含まれます。このヘッダーは、後で#8上記のリストのアイテムであるWebデバッグツールバーによってチェックされます。

上記のチェックのいずれかが失敗した場合

あなたはそれが失敗している理由を見つけるためにその特定の部分に焦点を合わせる必要があります。多分他のいくつかのバンドルが干渉していますか?構成ファイルの1つに問題がありますか?

すべてがチェックアウト

...しかし、それでも動作しませんか?まあ、それは奇妙です。返されたテンプレートに</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.