首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Symfony CLI中的空dump()输出

Symfony CLI中的空dump()输出
EN

Stack Overflow用户
提问于 2017-05-10 23:06:00
回答 1查看 1.2K关注 0票数 10

我正在构建一个简单的Symfony-shell脚本来在交互模式上测试Symfony应用程序

# bin/app_dev_cli.php

require __DIR__.'/../app/autoload.php';

$kernel = new AppKernel('dev', true);
// Initialize bundles and container
$kernel->boot();

// Useful global vars
$container = $kernel->getContainer();
$doctrine = $container->get('doctrine');
$em = $doctrine->getManager();

稍后,打开PHP交互模式并包含前面的脚本,我可以快速完成一些任务:

/path/to/symfony/project$ php -a
Interactive mode enabled

# Booting the Symfony-shell app
php > require 'bin/app_dev_cli.php';

# Check if one service has been registered successfully
php > dump( $container->has('some_service') );

# Test some service
php > dump( $container->get('some_service')->run($param) );

# Manage some entities and DB data flow
php > $apple = new AppBundle\Entity\Fruit('Apple');
php > $em->persist($apple);
php > $em->flush();

php > dump( $em->getRepository('AppBundle\Entity\Fluit')->findAll() );

# etc.

此处的问题是dump() 不显示任何内容。我期待着一个彩色的命令行输出,但是我用echovar_dump()尝试了一下,它工作了,但是主要是对象的输出是密集的和不可读的。在这个方向上,VarDumper Component documentation说:

默认情况下,根据您当前的PHP选择输出格式和目标... *在命令行(CLI )上,输出以STDOUT语言编写。..。

这在默认情况下对我不起作用,而且我确信PHP_SAPIcli。此外,I found a workarounddebug.dump_destination设置为php://stderr,但是:

# php interactive mode:
php > dump("test");
hp shell code on line 1: // <---- show the code line always
"test"

我不喜欢这个输出,也不会仅为此目的而更改配置。

dump() 函数有什么想法吗?为什么它什么都没有显示?谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-05-11 06:50:52

由于某些原因,看起来您要做的实际上是将特定的处理程序依赖注入到VarDumper

因此,在下面重现的类代码片段中,条件null === self::$handler始终为false,因此,没有设置您期望用于'cli' === PHP_SAPI的转储程序。

public static function dump($var)
{

    if (null === self::$handler) {
    /**       ^--- this one       **/
        $cloner = new VarCloner();
        $dumper = 'cli' === PHP_SAPI ? new CliDumper() : new HtmlDumper();
        self::$handler = function ($var) use ($cloner, $dumper) {
            $dumper->dump($cloner->cloneVar($var));
        };
    }
    return call_user_func(self::$handler, $var);
}

来源:Symfony/Component/VarDumper/VarDumper.php

现在,知道了这一点,您的解决方案就像将VarDumper的处理程序重新设置为null一样简单

工作代码:

# bin/app_dev_cli.php
<?php
use Symfony\Component\VarDumper\VarDumper;

require __DIR__.'/../app/autoload.php';

$kernel = new AppKernel('dev', true);
$kernel->boot();

/** This line (plus the use statement on top) does what you want **/
VarDumper::setHandler(null);

// Useful global vars
$container = $kernel->getContainer();
$doctrine = $container->get('doctrine');
$em = $doctrine->getManager();

运行时:

$ php -a
Interactive shell

php > require 'bin/app_dev_cli.php';
# bin/app_dev_cli.php 
php > dump('hi'); 
"hi"
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43896321

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档