我想在我們的測驗環境中實作除錯輸出,我想在其中輸出應用程式發送的服務請求。
為此,我想使用 symfony/twig 函式dump(),因為這里的輸出格式非常適合所有型別的變數,并且還提供了打開和關閉結構的選項。
偽代碼將是這樣的
{% if debugEnabled %}
{{dump (debugInfos)}}
{% endif %}
不幸的是,"dump" 是 Symfony DebugBundle 的一部分,出于充分的理由,它沒有在 Prod 環境中加載,應該保持這種狀態:
Symfony\Bundle\DebugBundle\DebugBundle::class => ['dev' => true, 'test' => true],
在 Symfony 檔案中說:
根據設計,dump() 函式僅在開發和測驗環境中可用,以避免在生產環境中泄露敏感資訊。事實上,在prod環境中嘗試使用dump()函式會導致PHP錯誤。
我根本不想dump()在生產環境中使用,而只想在本地輸出我們的服務請求。
但是,我無法實作像上面這樣的代碼,因為在生產中總是會發生錯誤(未定義的函式dump()),因為dump()根本沒有加載。
uj5u.com熱心網友回復:
您可以創建自己的函式來測驗擴展是否已加載。正如您在源代碼中看到的,該函式twig_var_dump已注冊,因此您可以測驗該函式是否存在以確定是否加載了除錯擴展。
dump只要您的擴展在除錯擴展后加載,就可以注冊您自己的函式
namespace App\Twig;
use Twig\Extension\AbstractExtension;
use Twig\TwigFunction;
use Twig\Environment;
class AppExtension extends AbstractExtension
{
public function getFunctions()
{
return [
new TwigFunction('dump', [$this, 'dump'] , ['needs_context' => true, 'needs_environment' => true, ]),
];
}
public function dump(Environment $env, $context, ...$vars)
{
if (!function_exists('\twig_var_dump')) return;
return \twig_var_dump($env, $context, ...$vars);
}
}
旁注:未對此進行測驗,但應該可以使用
uj5u.com熱心網友回復:
創建您自己的僅在生產中加載的擴展。
Twig在 src 目錄中創建一個檔案夾(例如)。如果您使用默認值,請將該檔案夾排除在自動裝配之外:
App\:
resource: '../src/'
exclude:
- '../src/DependencyInjection/'
- '../src/Entity/'
- '../src/Kernel.php'
- '../src/Tests/'
- '../src/Twig/' # This is the directory excluded from autowiring
然后config/services_prod.yaml用這個內容創建一個檔案:
services:
App\Twig\FakeDebugExtension: # replace with your class name
tags:
- twig.extension # not needed if you use autoconfiguration
然后用這個內容創建一個類:
<?php
namespace App\Twig;
use Twig\Extension\AbstractExtension;
use Twig\TwigFunction;
final class FakeDebugExtension extends AbstractExtension
{
public function getFunctions(): array
{
return [
new TwigFunction('dump', [$this, 'fakeDump']),
];
}
public function fakeDump(...$arguments): void
{
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/322532.html
