我想在Symfony中创建一个基本命令。
所以我跟着Symfony中的食谱。
但它说的是通过运行以下
来测试新的控制台命令$ php application.php demo:greet Fabien
我总是得到一个错误,说 -
无法打开输入文件:application.php
我创建了**GreetCommand.php**
文件并复制了那些确切的php命令。并创建一个 application.php 文件,我按照说明操作。
我把这两个文件放在同一个目录/文件夹中。
我做错了什么以及为什么我会收到这个错误。
以下是**GreetCommand.php**
---
<?php
namespace AppBundle\Command;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Output\OutputInterface;
class GreetCommand extends Command
{
protected function configure()
{
$this
->setName('demo:greet')
->setDescription('Greet someone')
->addArgument(
'name',
InputArgument::OPTIONAL,
'Who do you want to greet?'
)
->addOption(
'yell',
null,
InputOption::VALUE_NONE,
'If set, the task will yell in uppercase letters'
)
;
}
protected function execute(InputInterface $input, OutputInterface $output)
{
$name = $input->getArgument('name');
if ($name) {
$text = 'Hello '.$name;
} else {
$text = 'Hello';
}
if ($input->getOption('yell')) {
$text = strtoupper($text);
}
$output->writeln($text);
}
}
这是 application.php ---
的代码#!/usr/bin/env php
<?php
// application.php
require __DIR__.'/vendor/autoload.php';
use AppBundle\Command\GreetCommand;
use Symfony\Component\Console\Application;
$application = new Application();
$application->add(new GreetCommand());
$application->run();
答案 0 :(得分:1)
您收到的错误表明application.php
的路径无效。通过在不存在的文件上调用PHP可以重现相同的错误:
$ php doesnotexist.php
输出:
无法打开输入文件:doesnotexist.php
您linked to引用的文档是指Symfony的控制台组件,但根据您的代码段,您似乎正在使用整个Symfony 框架。区别很重要,因为期望组件独立于框架的其余部分起作用,这意味着在使用框架的其余部分时,实现可能略有不同。
我怀疑这本食谱文章会更有帮助:How to Create a Console Command