OctoberCMS:命令可能存在错误。错误:"在null"上调用成员函数writeln();

时间:2017-11-02 17:00:16

标签: php laravel shell command octobercms

我使用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()

两个命令都在插件中正确注册。

1 个答案:

答案 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();