Почему конструктор не выполняется и как это можно исправить?

Что я делаю не так, если при попытке инъекции класса ApiRequest в конструктор получаю ошибку "Unresolvable dependency resolving [Parameter #0 [  string $host ]]?" При этом, если я забиндю этот класс в AppServiceProvider, то все работает исправно. Можете указать на ошибку в моем подходе?
  • 25 сентября 2023 г. 20:27
Ответы на вопрос 1
Ошибка "Unresolvable dependency resolving [Parameter #0 [  string $host ]]" говорит о том, что Laravel не может разрешить зависимость конструктора класса ApiRequest, так как не может найти строковое значение для параметра $host.

Для исправления этой ошибки вам нужно указать значение параметра $host при создании экземпляра класса ApiRequest. Возможны несколько способов сделать это:

1. Внедрение зависимости через контейнер Laravel: 

Вместо создания экземпляра класса ApiRequest вручную используйте внедрение зависимости через конструктор. Убедитесь, что вы добавили ApiRequest в список классов, которые можно внедрять через автоматическое разрешение зависимостей контейнера Laravel.

Пример:
```php
use App\Services\ApiRequest;

class ExampleController extends Controller
{
    protected $apiRequest;

    public function __construct(ApiRequest $apiRequest)
    {
        $this->apiRequest = $apiRequest;
    }
}
```

Затем Laravel самостоятельно разрешит зависимость ApiRequest, если она была зарегистрирована в контейнере.

2. Указание значения для параметра $host:

Если вы хотите явно указать значение параметра $host при создании экземпляра класса ApiRequest, вы можете вручную создать экземпляр класса и передать значение параметра в конструктор.

Пример:
```php
use App\Services\ApiRequest;

class ExampleController extends Controller
{
    protected $apiRequest;

    public function __construct()
    {
        $this->apiRequest = new ApiRequest('example.com');
    }
}
```

Убедитесь, что вы передаете правильное значение для параметра $host вместо 'example.com'.

3. Использование AppServiceProvider:

Если ваш подход с использованием AppServiceProvider работает исправно, то вы можете продолжать использовать его для регистрации зависимостей. Убедитесь, что вы правильно зарегистрировали класс ApiRequest в методе register контейнера.

Пример:
```php
use App\Services\ApiRequest;
use Illuminate\Support\ServiceProvider;

class AppServiceProvider extends ServiceProvider
{
    public function register()
    {
        $this->app->bind(ApiRequest::class, function ($app) {
            return new ApiRequest('example.com');
        });
    }
}
```

Убедитесь, что вы правильно указали значение параметра $host при регистрации класса ApiRequest (вместо 'example.com').

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