Laravel 5.7: предотвратить автоматическое введение нагрузки в конструктор контроллера - PullRequest
0 голосов
/ 18 марта 2019

У меня есть HomeController с его конструктором, который использует экземпляр Guzzle.

   /**
     * Create a new controller instance.
     *
     * @param \GuzzleHttp\Client|null $client
     *
     * @return void
     */
    public function __construct(Client $client = null)
    {
        $this->middleware('auth');
        $this->middleware('user.settings');
        if ($client === null) {
            $param = [
                'base_uri' => 'http://httpbin.org/',
                'defaults' => [
                    'exceptions' => false,
                    'verify' => false
                ]
            ];
            $client = new Client($param);
        }
        $this->setClient($client);
    }

Я бы использовал через __constructor (), чтобы иметь возможность смоделировать его в тестах. Мои проблемы в том, что Laravel автоматически загружает инъекцию, а введенный клиент Guzzle имеет пустые значения по умолчанию (и больше не может его редактировать). Другими словами: при первом вызове HomeController Client не равен нулю. А мне нужно как ноль.

Как я могу остановить это поведение (только для __construct () для HomeController)? Я действительно использую DI в каждой части моего веб-приложения.

EDIT

Я просто нахожу, что если я не намекаю на Client, конечно, Laravel не может автоматически загружаться. Это правильный режим для работы?

Новый конструктор:

public function __construct($client = null)

Спасибо

1 Ответ

0 голосов
/ 18 марта 2019

У меня была симуляционная ситуация при тестировании apis. В итоге я связал экземпляр GuzzleClient с сервисным контейнером (см. документация ). Что-то вроде:

$this->app->instance('GuzzleHttp\Client', new MockClient);

Чтобы успешно смоделировать экземпляр, я затем проверил, имеет ли оно определенное значение свойства (в моем случае устанавливается base_url). Это определило, является ли экземпляр тестом, так как будет установлен base_url.

Помимо этого метода, GuzzleHttp\Client имеет MockHandler , который вы, возможно, захотите исследовать. Это может быть использовано для подделки тел ответа, заголовков и кодов состояния.

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