Laravel 5.7: я добавляю кучу классов в конструктор, но League \ Csv \ Reader - единственный, который не работает

У меня есть несколько ремесленных команд для выполнения некоторой логики интерфейса командной строки.

class SyncFooCommand extends AbstractBaseSyncCommand
class SyncBarCommand extends AbstractBaseSyncCommand
class SyncBazCommand extends AbstractBaseSyncCommand

Каждая команда artisan расширяет abstract class AbstractBaseSyncCommand extends Command implements SyncInterface.

Благодаря этому внутри абстрактного родительского класса я могу поместить некоторую общую логику.

Я ввожу Carbon или FileSystem, и оба работают в дочерних классах как шарм.

<?php

namespace App\Console\Commands\Sync;

use Carbon\Carbon;
use Illuminate\Console\Command;
use Illuminate\Contracts\Filesystem\Factory as Filesystem;
use League\Csv\Reader;

abstract class AbstractBaseSyncCommand extends Command implements SyncInterface
{
    protected $carbon;
    protected $fileSystem;
    protected $reader;

    public function __construct(
        Carbon $carbon,
        FileSystem $fileSystem,
        Reader $reader
    ) {
        parent::__construct();

        $this->carbon = $carbon; // works like a charm
        $this->fileSystem = $fileSystem; // works like a charm
        $this->reader = $reader; // fails, why?
    }
}

В SyncWhateverCommand я могу легко звонить и использовать $this->carbon или $this->fileSystem, но как только он попадает в $this->reader, я получаю:

   Illuminate\Contracts\Container\BindingResolutionException  : Target [League\Csv\Reader] is not instantiable while building [App\Console\Commands\Sync\SyncFooCommand].

  at /home/vagrant/code/foo/vendor/laravel/framework/src/Illuminate/Container/Container.php:945
    941|         } else {
    942|             $message = "Target [$concrete] is not instantiable.";
    943|         }
    944|
  > 945|         throw new BindingResolutionException($message);
    946|     }
    947|
    948|     /**
    949|      * Throw an exception for an unresolvable primitive.

Что случилось? Установка был простым и не требовал никаких привязок. Что мне не хватает?

Подводить итоги:

$csv = $this->reader->createFromPath($path, 'r'); // fails, but I want to use it this way

$csv = Reader::createFromPath($path, 'r'); // works but I don't want facades because they look ugly

какой класс вы связали в appserviceprovider class

Shailendra Gupta 17.10.2018 09:47
Стоит ли изучать 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
1
72
1

Ответы 1

Может быть, ваше приложение должно знать, как его получить? Нравиться

$this->app->bind('SomeAbstraction', function ($app) {
    return new Implementation();
});

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