默认情况下,控制台命令文件夹位于:MyProject\MyBundle\Command并且所有操作都按预期工作,但如果我将文件夹移动到另一个目录中,例如:MyProject\MyBundle\MyFolder\Command在命令执行时,它会抛出: [InvalidArgumentException] Command "command_name" is not defined.
在通过互联网搜索并阅读可能与此问题相关的所有文档后,我找不到任何有用的东西......
问题是:存在移动该文件夹的模式还是我将被迫使用默认文件夹?
谢谢!
我正在开发一个非常简单的Symfony控制台应用程序。它只有一个带有一个参数的命令,以及几个选项。
我按照本指南创建了Application该类的扩展。
这是该应用程序的正常用法,并且工作正常:
php application <argument>
这也很好用(带有选项的参数):
php application.php <argument> --some-option
如果有人在运行时php application.php没有任何参数或选项,那么我希望它像用户在运行一样运行php application.php --help。
我确实有一个可行的解决方案,但它不是最佳解决方案,可能有点脆弱。在扩展Application类中,我run()按如下方式覆盖了该方法:
/**
* Override parent method so that --help options is used when app is called with no arguments or options
*
* @param InputInterface|null $input
* @param OutputInterface|null $output
* @return int
* @throws \Exception
*/
public function run(InputInterface $input = null, OutputInterface $output = null)
{
if ($input === null) { …Run Code Online (Sandbox Code Playgroud) 当运行 Symfony 控制台应用程序并出现错误/异常/警告时,例如:
[Symfony\Component\Debug\Exception\ContextErrorException]
警告:为 foreach() 提供的参数无效
它没有显示问题所在的行号,因此很难定位。
有没有办法显示它?
php error-handling console-application symfony symfony-console
在我正在尝试的Windows机器上使用Symfony 2和Doctrine
从现有模式生成实体:
php app/console doctrine:mapping:import --force CoreBundle annotation
在它们上生成getter/setter:
php app/console doctrine:generate:entities --path=/path/to/codebase/src/MyProject/CoreBundle/Entities CoreBundle
使用Voryx在它们上生成REST CRUD控制器:
php app/console voryx:generate:rest --entity="CoreBundle:User"
第一步工作正常,我可以在我的CoreBundle/Entity文件夹中找到具有正确命名空间的实体:
MyVendor\MyProject\CoreBundle\Entity
Run Code Online (Sandbox Code Playgroud)
目前很好.但是,运行其他2个命令将失败:
[RuntimeException]
Can't find base path for "CoreBundle" (path:
"\path\to\codebase\src\MyProject\CoreBundle", destination:
"/path/to/codebase/src/MyProject/CoreBundle").
Run Code Online (Sandbox Code Playgroud)
我的composer.json中的自动加载看起来像这样:
"autoload": {
"psr-4": {
"MyVendor\\": "src/"
}
},
Run Code Online (Sandbox Code Playgroud)
我发现Doctrine不能处理PSR-4命名空间,这可能是它失败的原因.
我真的希望这些实体能够存在于PSR-4 CoreBundle中 - 它有解决方法吗?
我试过这个,但它也不起作用:
"autoload": {
"psr-0": {
"MyVendor\\MyProject\\CoreBundle\\Entity": "src/MyProject/CoreBundle/Entity/"
},
"psr-4": {
"MyVendor\\": "src/"
}
},
Run Code Online (Sandbox Code Playgroud)
谢谢.
我编写了一个模块,实际上是 Magento 2 中的自定义命令。显然,Magento 2 控制台应用程序自豪地由Symfony Console提供支持。我关心的是如何禁用$output指定命令的输出?
例如:
$setupUpgradeCommand = $this->getApplication()->find('setup:upgrade');
$setupUpgradeArguments = array(
'command' => 'setup:upgrade',
'--quiet' => true,
);
$setupUpgradeInput = new ArrayInput($setupUpgradeArguments);
$start = microtime(true);
$output->writeln('<info>Start upgrading module schemas...</info>');
$setupUpgradeCommand->run($setupUpgradeInput, $output);
$output->writeln('...............................<info>OK</info>');
// My long logic-code start from here....
Run Code Online (Sandbox Code Playgroud)
不幸的是,即使我设置--quiet为 true,此命令的输出setup:upgrade仍然存在。
有任何想法吗?
我使用Symfony CLI工具,我正在寻找一种检查环境的方法.我找不到类似的东西
$ php bin/console get environment
Run Code Online (Sandbox Code Playgroud)
还有另外一种方法吗?有可能/如何找出当前活动的环境?
编辑
应用程序在具体环境中运行(然后使用app.phpfor prod或app_{env}for for other environment).
所以我真正想要实现的是找出应用程序当前正在使用哪个环境(当通过HTTP调用应用程序时,例如在浏览器中).
我有一个Symfony/Console命令,它使用Guzzle Pool一次下载几个文件.我已经有Guzzle报告每个文件的下载进度,这很好.
现在我想使用Symfony/Console 的ProgressBar帮助器来改进它.问题是我为ProgressBar找到的所有示例只使用一个进度条.我需要几个独立的进度条 - 每个下载一个.你能给我一些提示如何实现吗?
Symfony 控制台进度条不是在同一行上前进,而是在新行上创建
1/2 [==============>-------------] 50%
! [NOTE] No changes made to Categories/CategoriesSchema
2/2 [============================] 100%
2/2 [============================] 100%
Run Code Online (Sandbox Code Playgroud)
我假设进度条只会在同一行上移动,直到操作完成。这是我的代码
$io = new SymfonyStyle($input, $output);
$progressbar = new ProgressBar($output, count($elements));
$progressbar->start();
foreach ($elements as $element) {
//work on element
io->note("No changes made to ".ucfirst($name));
$progressbar->advance();
$io->newLine();
}
$progressbar->finish();
Run Code Online (Sandbox Code Playgroud)
我做错了什么??
我有PhpStorm 2016.2,并且在Shell路径中添加了Cygwin,如下所示: "C:\cygwin64\bin\env.exe" CHERE_INVOKING=1 /bin/bash.exe
它工作正常,但颜色不起作用。对于为例我?[32m Name不是已经Name在绿色。
我尝试了几种方法,例如添加插件Grep Console以支持ANSI Color,但是没有用。
使用具有多种ANSI颜色的线真的很难?[39m ?[32m Scheme ?[39m ?[32m Host ?[39m ?[32m Path。
请随时询问有关该问题的更多信息。谢谢。
PS我在Windows 10上。
编辑
当我/usr/bin/which php在PHPStorm终端中执行操作时,我得到了/cygdrive/d/wamp2/bin/php/php5.6.16/php。我的WAMP中有php5.6.16和php7.0.0,目前正在使用php7.0.0。
编辑2我所以现在添加了php7.0.0一个$ PATH我有/cygdrive/d/wamp2/bin/php/php7.0.0/php,当我做/usr/bin/which php。但是主要问题仍然存在。
我需要从参数parameters.yml中的Command\ContainerAwareCommand类.我没有看到$this->getParameter()那里.
有没有一种从parameters.yml外部控制器检索参数的简单方法?
比以下更简单:编写"友好配置",并将参数foo放入config.yml,然后检索参数DependencyInjection\Extension::load(),并设置它:$container->setParameter('foo', $foo),最后在Command\ContainerAwareCommand检索它$this->getContainer()->getParameter('foo')?
我在以下服务定义IntegrationBundle/Resources/config/services.yml:
services:
event.subscriber.params.extractor:
class: IntegrationBundle\Middleware\EventSuscriberParamsExtractor
main.api:
class: IntegrationBundle\API\MainAPI
calls:
- [setContainer, ['@service_container']]
order.push.api:
class: IntegrationBundle\API\OrderPushAPI
calls:
- [setContainer, ['@service_container']]
process.account.api:
class: IntegrationBundle\API\ProcessAccountData
arguments:
- '@event.subscriber.params.extractor'
calls:
- [setContainer, ['@service_container']]
...
Run Code Online (Sandbox Code Playgroud)
我需要main.api从一个Symfony命令中访问,这就是我的操作方式:
namespace IntegrationBundle\Command;
use Symfony\Bundle\FrameworkBundle\Command\ContainerAwareCommand;
use Symfony\Component\Console\Command\LockableTrait;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputDefinition;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Output\OutputInterface;
class SchneiderAPICommand extends ContainerAwareCommand
{
use LockableTrait;
protected function configure()
{
$this
->setName('api:execute')
->setDefinition(
new InputDefinition([
new InputOption('source', '', InputArgument::OPTIONAL, '', 'Wonderware'),
new InputOption('object', '', InputArgument::OPTIONAL, '', 'Account,AgreementHistory'),
new …Run Code Online (Sandbox Code Playgroud) 我正在升级一个扩展以与 TYPO3 v10 一起使用。由于命令控制器不能再使用,我将它们迁移到文档中指出的 symfony 命令。除了使用 extbase 存储库类之外,一切都运行顺利。无论我查询什么,我都不会得到结果。由于我在网络和文档上找不到任何有用的信息,我希望这可能只是一些小问题。
经过一段时间的调试后,我发现在构建查询设置时没有正确确定 pid。我觉得这很奇怪,因为我的根模板有这些行:
plugin.tx_myext.persistence.storagePid = 15403
module.tx_myext.persistence.storagePid = 15403
Run Code Online (Sandbox Code Playgroud)
存储库实例通过injectMyRepository() 方法正确注入。我尝试使用 extbase ObjectManager 来获取类实例,但“错误”保持不变。
我是否做错了什么或者是否无法在 symfony 命令中使用 extbase 存储库类?
symfony-console ×12
symfony ×10
php ×8
console ×1
cygwin ×1
doctrine-orm ×1
environment ×1
extbase ×1
guzzle ×1
magento ×1
phpstorm ×1
psr-0 ×1
symfony-3.2 ×1
terminal ×1
typo3 ×1
typo3-10.x ×1
wamp ×1