Внедрение зависимостей на Laravel 5.5 не работает после удаления неиспользуемого класса - PullRequest
0 голосов
/ 05 ноября 2019

Это работало безупречно, но я удалил некоторые неиспользуемые классы, и теперь функция автоматического подключения laravel не разрешает зависимости типа подсказок.

Я объявил в AppServiceProvider.php различные привязки для классов обслуживания, зависимости которых должны быть разрешены с помощью автоматического подключения, но это не так.

Я оставляю пример кода AppServiceProvider.php икласс ProductoService.php

Что мне здесь не хватает? Заранее спасибо!

Ошибка

Ошибка типа: слишком мало аргументов для функции App \ Services \ ProductoService :: __ construct (), 0 передано в / home / eznb / Documentos / osiris/app/Providers/AppServiceProvider.php в строке 44 и ожидается ровно 1

AppServiceProvider.php


namespace App\Providers;

use App\Services\CajaService;
use App\Services\PrecioService;
use App\Services\ProductoService;
use App\Services\ServicioService;
use App\Services\TrabajoService;
use App\Services\TurnoService;
use Calendar;
use Illuminate\Support\ServiceProvider;

class AppServiceProvider extends ServiceProvider
{
    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {
        //
        view()->composer('*', function ($view) {

            $event_list = [];

            $calendar_details = Calendar::addEvents($event_list);
            $view->with('calendar_details', $calendar_details);
        });
    }

    /**
     * Register any application services.
     *
     * @return void
     */
    public function register()
    {
        $this->app->bind(PrecioService::class, function ($app) {
            return new PrecioService();
        });
        $this->app->bind(ProductoService::class, function ($app) {
            return new ProductoService();
        });
        $this->app->bind(ServicioService::class, function ($app) {
            return new ServicioService();
        });
        $this->app->bind(CajaService::class, function ($app) {
            return new CajaService();
        });
        $this->app->bind(TrabajoService::class, function ($app) {
            return new TrabajoService();
        });
        $this->app->bind(TurnoService::class, function ($app) {
            return new TurnoService();
        });
    }
}

ProductoService.php


namespace App\Services;

use App\Producto;
use App\Services\PrecioService;

class ProductoService
{
    protected $precio_service;

    public function __construct(PrecioService $precio_service)
    {
        $this->precio_service = $precio_service;
    }
.
.
.
some more core
.
.
.

1 Ответ

1 голос
/ 05 ноября 2019

Пожалуйста, измените ваш AppServiceProvider.php на Ниже

 namespace App\Providers;
use App\Services\CajaService;
use App\Services\PrecioService;
use App\Services\ProductoService;
use App\Services\ServicioService;
use App\Services\TrabajoService;
use App\Services\TurnoService;
use Calendar;
use Illuminate\Support\ServiceProvider;

class AppServiceProvider extends ServiceProvider
{
    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {
        //
        view()->composer('*', function ($view) {

            $event_list = [];

            $calendar_details = Calendar::addEvents($event_list);
            $view->with('calendar_details', $calendar_details);
        });
    }


    /**
     * Register any application services.
     *
     * @return void
     */
    public function register()
    {
        $this->app->bind(PrecioService::class, function ($app) {
            return new PrecioService();
        });
        $this->app->bind(ProductoService::class, function ($app) {
            return new ProductoService($app[PrecioService::class]); // Here i made the change as you ProductoService constructort has as its dependency
        });
        $this->app->bind(ServicioService::class, function ($app) {
            return new ServicioService();
        });
        $this->app->bind(CajaService::class, function ($app) {
            return new CajaService();
        });
        $this->app->bind(TrabajoService::class, function ($app) {
            return new TrabajoService();
        });
        $this->app->bind(TurnoService::class, function ($app) {
            return new TurnoService();
        });
    }

Я использовал $ app [PrecioService :: class] для разрешения из сервисного контейнера, так как вы зарегистрировали его в этой строке $ this-> app-> bind (PrecioService :: class, function ($ app) {return new PrecioService ();});Пусть это решит ваш запрос. Если вам неясно, вы можете прокомментировать ниже. Я объясню подробно, если требуется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...