我使用build 419,这是一个解释问题的简单例子。我有这个班A:
class A extends Command
{
protected $name = 'projects:a';
public function fire()
{
$this->a();
}
public function a()
{
$this->info('Hello');
}
}
我想从B类调用方法a():
class B extends Command
{
protected $name = 'projects:b';
public function fire()
{
$a = new A();
$a->a();
}
}
但是当我运行命令" php artisan projects:b
"这是控制台错误:
[Symfony的\元器件\调试\异常\ FatalThrowableError] 在null
上调用成员函数writeln()
两个命令都在插件中正确注册。
答案 0 :(得分:0)
似乎你想要访问那个方法,你需要输出。
如果案件是你只想执行某些代码,你可以删除或评论
// $this->info('Hello');
并且您的控制台命令应该按预期运行。
在这种情况下,当 $ this-> info('Hello')被调用并尝试在输出缓冲区中写入输出..但它无法找到它。
如果要定义输出缓冲区,则可以通过输出接收此 info 方法内容。你需要运行带有输出缓冲区的命令确保这将执行其他整个命令
use App;
use Symfony\Component\Console\Input\ArrayInput;
use Symfony\Component\Console\Output\BufferedOutput;
// .....
$command = App::make('Author\Testplugin\Console\CommandA');
$command->setLaravel($this->laravel);
$input = new ArrayInput([]);
$output = new BufferedOutput();
$resultCode = $command->run($input, $output);
// your method
$command->oks();
$content = $output->fetch(); // output of another command
$this->output->writeln('Hello world! B');
$this->output->writeln($content);
如果您只需要部分逻辑,那么您只需删除信息方法,就可以了。
$command = App::make('Author\Testplugin\Console\CommandA');
$command->setLaravel($this->laravel);
$command->a();