php – Symfony CLI中的空转储()输出
我正在构建一个简单的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 AppBundleEntityFruit('Apple'); php > $em->persist($apple); php > $em->flush(); php > dump( $em->getRepository('AppBundleEntityFluit')->findAll() ); # etc. 这里的问题是dump()函数什么都没显示.我期待一个彩色的命令行输出,但是我试着用echo和var_dump()向我展示期望值,但对于对象,主要是输出密集且不可读.在这方面,VarDumper Component documentation说:
默认情况下,这对我不起作用,我确信PHP_SAPI是cli.此外,I found a workaround将debug.dump_destination设置为php:// stderr,但是: # php interactive mode: php > dump("test"); hp shell code on line 1: // <---- show the code line always "test" 我不喜欢这个输出,也没有为此目的更改配置. 有什么想法dump()函数会发生什么,为什么它什么都没显示?谢谢.
出于某种原因,看起来你要做的实际上是将特定处理程序注入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 SymfonyComponentVarDumperVarDumper; 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" (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |