Настройка класса консольной команды:
MyCommand extends Tasks
{
protected function task()
{
$this->info('test');
}
}
Tasks extends Illuminate\Console\Command {
public function log($string) {
Storage::disk('local')->append($filename,$string);
}
public function info($string, $verbosity = NULL)
{
$this->log($string);
// this doesnt work, because it just loops back to this info
// parent::info($string, $verbosity);
// why is this still looping back here?
Command::info($string, $verbosity);
}
public function line($string, $style = null, $verbosity = null)
{
$this->log($string);
Command::line($string, $style, $verbosity);
}
}
Возможно, я слишком долго смотрю на код и вижу очевидный ответ.
Что необычно, независимо от того, как я пытаюсь получить доступ к методу в родительском Command
классе,
I не может вызвать исходный метод в Command
без дочерний метод выполняется дважды или бесконечно много раз. ,
Либо с использованием Command::
, либо parent::
, либо static::
, все из которых только что зациклились, либо вызывая бесконечное l oop, либо вызывая для запуска метода log()
несколько раз.
Мне кажется, laravel выполняет родительское действие, а затем автоматически выполняет дочерние действия.
Если я не вызываю родительский метод, он прекрасно печатается в журнале, однако вывод в консоли не будет отображаться, так как он не вызывает родительский метод. Единственный другой вариант, который у меня остался, это не переопределять эти методы (но это значит, что мне нужно go вернуться назад и настроить все мои команды)
РЕДАКТИРОВАТЬ: Добавлены остальные код
ОБНОВЛЕНИЕ: РЕШЕНО! Глядя на исходный код Command
, info
вызывает line
, и поэтому кажется, что он дублирует результаты.