У меня есть класс, который я хотел бы добавить в другой класс (например, контроллер). Этот класс принимает модель в качестве первого аргумента и объект клиента Guzzle HTTP в качестве второго аргумента.
<?php
namespace App\Services;
use App\MyModel;
use GuzzleHttp\Client;
class MyClass
{
private $model;
private $client;
public function __construct(MyModel $model, Client $client)
{
$this->model = $model;
$this->client = $client;
}
}
MyModel имеет URL-адрес, который клиент Guzzle будет использовать для конфигурации по умолчанию (которая передается его конструктору).
Без DI это выглядело бы примерно так.
public function myControllerMethod()
{
$model = new MyModel;
$client = new Client([
'base_uri' => $model->url,
'headers' => [
'Authorization' => "Bearer {$model->api_token}",
]
]);
$my_class = new MyClass($model, $client);
}
Как мне провести рефакторинг, чтобы я мог просто внедрить MyClass в метод контроллера, не настраивая $ client вручную на основе данной модели? Это вообще возможно?
public function myControllerMethod(MyModel $model, MyClass $my_class)
{
// The model could come from the request or injected into this method (as shown).
$my_class->doSomething();
}