У меня есть такая команда
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.
как я могу это сделать @Alfa?
(new ExtendedCommand())->sync() не работает? Однако учтите это. Вы пишете команду, которую хотите использовать, как если бы это был обычный класс. Это обязательно должна быть команда?
Не работает, @apokryfos, вот почему я задал вопрос :)
Решает ли мой ответ вашу проблему @ShobiPP?
Я думаю, что моя точка зрения остается в силе. Если вам не нужна команда, не создавайте ее. Расширение существующей команды, потому что вам нужна часть ее функциональности, заставляет меня думать, что функциональность можно разместить где-нибудь еще.
@apokryfos, да вы правы, в итоге я не написал команду.






Больше похоже на это
<?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
Это просто псевдокод. Вы можете передать этому методу другой аргумент.
Вам нужно отделить логику от другого класса.