dump() 后如何终止 Twig 中的执行?
How to kill execution in Twig after dump()?
我正在使用 Twig 中的 {{ dump(foo) }}
函数来调试我的模板。但是,如果模板在 dump() 函数之后抛出错误,您只会看到 Symfony 的调试页面通知您错误。您显然可以在 Twig 模板中注释掉有问题的代码行,但是有没有办法在之后立即终止模板的执行,以便 dump() 函数的输出是屏幕上最后打印的内容。我天真地在想 {{ dump(foo) }} {{ die() }}
这样的东西。关于如何实现这一点有什么想法吗?
我认为您不应该停止 PHP 在您的 Twig 模板内执行(即使这可以使用自定义 Twig 扩展)。结果不会是您所期望的,因为在呈现模板和将其发送到浏览器之间发生了很多事情。如果你简单地停止执行,所有这一切都不会再发生,我怀疑你会得到一个简单的白页。
也许将变量转储到控制器中是更好的方法。这样做会将转储输出发送到 Web 分析器工具栏,该工具栏甚至在 symfony 的错误页面上也可用。
哦,好吧,只使用评论 ({# ... #}
) 来禁用模板的非工作部分怎么样?
您可以创建一个简单的 twig 扩展来处理这个问题。
你的树枝文件..
namespace Acme\SomeBundle\Twig;
class DevExtension extends \Twig_Extension
{
/**
* {@inheritdoc}
*/
public function getFunctions()
{
return array(
new \Twig_SimpleFunction('die', 'die'),
);
}
/**
* {@inheritdoc}
*/
public function getName()
{
return 'acme_dev';
}
}
您的服务文件 (YAML)..
services:
acme.twig.dev_extension:
class: Acme\SomeBundle\Twig\DevExtension
tags:
- { name: twig.extension }
此外您可以传入当前环境,然后根据环境死掉或静默失败,以防您出于某种原因在代码中留下死角。
你的树枝扩展..
class DevExtension extends \Twig_Extension
{
/**
* @string
*/
private $environment;
/**
* @param string $environment
*/
public function __construct($environment)
{
$this->environment = $environment;
}
/**
* {@inheritdoc}
*/
public function getFunctions()
{
return array(
new \Twig_SimpleFunction('die', array($this,'killRender')),
);
}
/**
* @param string|null $message
*/
public function killRender($message = null)
{
if ('dev' === $this->environment) {
die($message);
}
return '';
}
...
}
您的服务文件..
services:
acme.twig.dev_extension:
class: Acme\SomeBundle\Twig\DevExtension
arguments:
- %kernel.environment%
tags:
- { name: twig.extension }
我正在使用 Twig 中的 {{ dump(foo) }}
函数来调试我的模板。但是,如果模板在 dump() 函数之后抛出错误,您只会看到 Symfony 的调试页面通知您错误。您显然可以在 Twig 模板中注释掉有问题的代码行,但是有没有办法在之后立即终止模板的执行,以便 dump() 函数的输出是屏幕上最后打印的内容。我天真地在想 {{ dump(foo) }} {{ die() }}
这样的东西。关于如何实现这一点有什么想法吗?
我认为您不应该停止 PHP 在您的 Twig 模板内执行(即使这可以使用自定义 Twig 扩展)。结果不会是您所期望的,因为在呈现模板和将其发送到浏览器之间发生了很多事情。如果你简单地停止执行,所有这一切都不会再发生,我怀疑你会得到一个简单的白页。
也许将变量转储到控制器中是更好的方法。这样做会将转储输出发送到 Web 分析器工具栏,该工具栏甚至在 symfony 的错误页面上也可用。
哦,好吧,只使用评论 ({# ... #}
) 来禁用模板的非工作部分怎么样?
您可以创建一个简单的 twig 扩展来处理这个问题。
你的树枝文件..
namespace Acme\SomeBundle\Twig;
class DevExtension extends \Twig_Extension
{
/**
* {@inheritdoc}
*/
public function getFunctions()
{
return array(
new \Twig_SimpleFunction('die', 'die'),
);
}
/**
* {@inheritdoc}
*/
public function getName()
{
return 'acme_dev';
}
}
您的服务文件 (YAML)..
services:
acme.twig.dev_extension:
class: Acme\SomeBundle\Twig\DevExtension
tags:
- { name: twig.extension }
此外您可以传入当前环境,然后根据环境死掉或静默失败,以防您出于某种原因在代码中留下死角。
你的树枝扩展..
class DevExtension extends \Twig_Extension
{
/**
* @string
*/
private $environment;
/**
* @param string $environment
*/
public function __construct($environment)
{
$this->environment = $environment;
}
/**
* {@inheritdoc}
*/
public function getFunctions()
{
return array(
new \Twig_SimpleFunction('die', array($this,'killRender')),
);
}
/**
* @param string|null $message
*/
public function killRender($message = null)
{
if ('dev' === $this->environment) {
die($message);
}
return '';
}
...
}
您的服务文件..
services:
acme.twig.dev_extension:
class: Acme\SomeBundle\Twig\DevExtension
arguments:
- %kernel.environment%
tags:
- { name: twig.extension }