Dans mon .env
fichier, j'ai spécifié que mon environnement d'application doit être dev et debug être vrai comme ceci:
APP_ENV=dev
APP_DEBUG=true
Dans mon config/packages/dev/web_profiler.yaml
fichier J'ai les éléments suivants:
web_profiler:
toolbar: true
intercept_redirects: false
framework:
profiler: { only_exceptions: false }
Le routage dans config/routes/dev/web_profiler.yaml
semble bien:
web_profiler_wdt:
resource: '@WebProfilerBundle/Resources/config/routing/wdt.xml'
prefix: /_wdt
web_profiler_profiler:
resource: '@WebProfilerBundle/Resources/config/routing/profiler.xml'
prefix: /_profiler
Donc, quand je lance le serveur avec symfony server:start
tout va bien, mais le profileur n'apparaît pas. Ai-je raté quelque chose qui active cette fonctionnalité dans Symfony?
Pour clarifier, la page génère une page HTML appropriée avec le contenu approprié. Aucun profileur n'apparaît.
Ma base twig template:
<!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>
Pare-feu 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!
Résultats sur 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
Enfin contrôleur de page d'accueil:
<?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',
]);
}
}
?>
Ajout de 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);
Il est très difficile, voire impossible, de déboguer cela à distance. Le problème exact est lié à quelque chose de spécifique dans votre configuration locale et une personne n'ayant pas accès à votre projet n'aurait pas la chance de voir exactement ce qui ne va pas.
Quelques conseils de dépannage généraux et spécifiques à votre situation:
Bien qu'inhabituelle, l'installation pourrait être falsifiée. Assurez-vous que votre package de profileur est correct.
Retirez-le d'abord (composer remove profiler
), puis réinstallez-le: composer require --dev profiler
).
Utilisez la commande de console de Symfony pour vérifier votre configuration.
Tout d'abord pour le profileur intégré:
$ bin/console debug:config framework profiler
Ce qui devrait renvoyer quelque chose comme ceci:
Current configuration for "framework.profiler"
==============================================
only_exceptions: false
enabled: true
collect: true
only_master_requests: false
dsn: 'file:%kernel.cache_dir%/profiler'
Et puis pour la barre d'outils du profileur:
$ bin/console debug:config web_profiler
Qui devrait renvoyer quelque chose comme:
Current configuration for extension with alias "web_profiler"
=============================================================
web_profiler:
toolbar: true
intercept_redirects: false
excluded_ajax_paths: '^/((index|app(_[\w]+)?)\.php/)?_wdt'
Vérifiez comment le service Profiler sera instancié:
$ bin/console debug:container profiler --show-arguments
Attendez-vous à quelque chose comme ça:
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
---------------- -------------------------------------------------------------------------------------
Et puis pour la web_toolbar:
# bin/console debug:container web_profiler.debug_toolbar --show-arguments
Pour quelque chose comme ça:
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)
---------------- ------------------------------------------------------------------------
(Noter la 2
, qui active la barre d'outils).
La barre d'outils de débogage Web est injectée pendant le kernel.response
un événement. Vérifiez que le rappel est correctement raccordé:
$ bin/console debug:event-dispatcher kernel.response
Ce qui retournera quelque chose comme ça:
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
------- -------------------------------------------------------------------------------------------- ----------
Remarquez l'article #7
, qui est le collecteur Profiler (qui comprendra entre autres le X-Debug-Token
en-tête dans la réponse, qui sera vérifié ultérieurement par la barre d'outils de débogage Web, qui est l'élément #8
dans la liste ci-dessus.
Vous devrez vous concentrer sur cette partie spécifique pour découvrir pourquoi elle échoue. Peut-être qu'un autre paquet interfère? Un problème avec l'un des fichiers de configuration?
... mais ne fonctionne toujours pas? Eh bien, c'est bizarre. Assurez-vous que votre modèle renvoyé a un </body>
tag, et que la réponse renvoyée a text/html
type de contenu. Mais si tout ce qui précède est vérifié ... cela devrait fonctionner.
Dans un commentaire, vous dites que framework.profiler.collect
est défini sur false lors de l'exécution de ces vérifications.
Définissez-le sur true en modifiant config/packages/dev/web_profiler.yaml
comme ça:
framework:
profiler:
only_exceptions: false
collect: true