Как можно автоматически создавать объект в Laravel?

Laravel умеет сам из коробки подставлять параметры, тем самым создавая объект. Например при вызове команды IndexNewPositionCommand он сам создаст PositionIndexer(//1).

Подскажите, можно ли как-то передать передавать в класс 1 объект, а второй чтобы сам создавался, а то слишком много придётся самому прописать вот этих зависимостей? Куда копать, где чего читать?
use App\Services\Search\PositionIndexer;
use Illuminate\Console\Command;
class IndexNewPositionCommand extends Command
{
    //1
    public function __construct(PositionIndexer $indexer) {
        parent::__construct();
    }
    //2
    //public function __construct(Position $position, PositionIndexer $indexer) {
        parent::__construct();
    }
}

use Elasticsearch\Client;
class PositionIndexer
{
    private $client;
    public function __construct(Client $client){
        $this->client = $client;
    }
}

// Хочется передавать $position, а второй параметр, чтобы сам вычислялся и создавался...
$position = Position::findOrFail(1);
$dispatcher->dispatch(new IndexNewPosition($position, new PositionIndexer(new Elasticsearch\Client(итутещёкучавсего))));


Решение
$indexer = resolve('App\Services\Search\PositionIndexer');
  • Вопрос задан
  • 307 просмотров
Решения вопроса 1
Sanasol
@Sanasol Куратор тега Laravel
нельзя просто так взять и загуглить ошибку
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы