Как мне вызвать дескриптор команд Laravel из самой команды?

У меня есть такая команда

class TestCommand extends Command {
 .....
 constructor
 .....

 public function handle()
 {
    ....
    command logic
    ....
 }
}

TestCommand также зарегистрирован в Kernel.php.

теперь мне нужно расширить TestCommand,

class ExtendedCommand extends TestCommand {

  public function __construct ()
  {
    parent::__constrct();
    .....
    modify some variables
    .....
  }

  public function sync()
  {
     //trying to call the parent class handle method.

     $this->handle(); // not working & getting PHP Error:  Call to a member function getOption() on null in /home/vagrant/sinbad/vendor/laravel/framework/src/Illuminate/Console/Command.php on line 292
     $this->execute(); // obviously not working & getting TypeError: Too few arguments to function Illuminate\Console\Command::execute(),
  }
}

//instantiating the new command
   new(ExtendedCommand)->sync();

Теперь мне нужно вызвать на ExtendedCommand, как я могу это сделать? решение без регистрации этой команды в kernel.php было бы лучше, потому что я не ищу способ Artisan::call.

Вам нужно отделить логику от другого класса.

krisanalfa 28.03.2018 09:54

как я могу это сделать @Alfa?

Shobi 28.03.2018 09:55

(new ExtendedCommand())->sync() не работает? Однако учтите это. Вы пишете команду, которую хотите использовать, как если бы это был обычный класс. Это обязательно должна быть команда?

apokryfos 28.03.2018 10:09

Не работает, @apokryfos, вот почему я задал вопрос :)

Shobi 28.03.2018 10:50

Решает ли мой ответ вашу проблему @ShobiPP?

krisanalfa 28.03.2018 11:21

Я думаю, что моя точка зрения остается в силе. Если вам не нужна команда, не создавайте ее. Расширение существующей команды, потому что вам нужна часть ее функциональности, заставляет меня думать, что функциональность можно разместить где-нибудь еще.

apokryfos 28.03.2018 13:27

@apokryfos, да вы правы, в итоге я не написал команду.

Shobi 28.03.2018 13:45
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
7
703
1

Ответы 1

Больше похоже на это

<?php

class TestCommand extends Command
{
    public function __construct(Handler $handler)
    {
        parent::__construct();

        $this->handler = $handler;
    }

    public function handle()
    {
        $this->handler->handle();
    }
}

// No need to extends from TestCommand
class ExtendedCommand extends Command
{
    public function __construct(Handler $handler)
    {
        parent::__construct();

        $this->handler = $handler;

        // do the rest
    }

    public function sync()
    {
        $this->handler->handle();
        $this->execute();
    }
}

class Handler
{
    public function handle()
    {
        // Put your logic here
    }
}

В вашем решении часть $this->execute(); не работает. поскольку для этого требуются параметры ввода и вывода. Сам не мог разобраться. но разделение логики в чем-то мне помогло. Благодарю. +10

Shobi 28.03.2018 13:47

Это просто псевдокод. Вы можете передать этому методу другой аргумент.

krisanalfa 28.03.2018 17:03

Другие вопросы по теме