在我的.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);
答案 0 :(得分:4)
很难(即使不是不可能)进行远程调试。确切的问题与本地设置中的特定问题有关,并且无法访问您的项目的人将没有机会确切地了解问题所在。
针对您的情况的一些常规和特定的故障排除建议:
虽然异常,但安装可能会失败。确保您的探查器包没有问题。
首先将其删除(composer remove profiler
),然后再次安装:composer require --dev profiler
)。
使用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'
检查如何实例化Profiler服务:
$ 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
事件期间注入了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
,它是Profiler收集器(除其他外,响应中包括X-Debug-Token
标头,稍后将由Web调试工具栏(项目{{ 1}}。
您必须专注于该特定部分以找出为什么失败。也许其他束干扰了吗?其中一个配置文件有问题?
...但是仍然无法正常工作?好吧,那很奇怪。确保您返回的模板具有#8
标签,并且返回的响应具有</body>
内容类型。但是,如果上述所有方法都可以检出...它应该可以工作。
在注释中,您说执行这些检查时text/html
设置为false。
通过像这样更改framework.profiler.collect
来将其设置为true:
config/packages/dev/web_profiler.yaml
答案 1 :(得分:3)
我也有这个问题。我是 Sympfony 的新手,我不知道,如果在 apache 上运行,必须通过 composer 要求 .htaccess。只需这样做:
composer require symfony/apache-pack
是解决方案。
答案 2 :(得分:0)
在新的Symfony 5.1应用程序中,我也有类似的症状-即使项目处于调试模式,调试工具栏也不会显示在某些页面上。原来,在这个应用程序中,我打算将<body></body>
标签放置在每个页面的树枝模板中,而不是基本模板中。但是对于一些页面(那些没有显示调试工具栏的页面),我忘了在页面模板中包含<body></body>
标签,因此呈现的HTML没有<body>
标签-因此调试工具栏将不会显示。
答案 3 :(得分:0)
尝试使用命令:
composer dump-env dev
答案 4 :(得分:-1)
通过 http
而不是访问您的本地站点时也会发生这种情况
https
,可以使工具栏请求失败。