Чтобы сохранить контекст Laravel внутри класса Task в amPHP, вам потребуется выполнить несколько действий.
1. Установите пакет amphp/laravel-bridge, выполнив следующую команду в терминале:
composer require amphp/laravel-bridge
2. Создайте класс Task и импортируйте необходимые пространства имен:
use AmpPromise; use AmpSuccess; use AmpDelayed; use AmpLoop; use AmpHttpClientHttpClientBuilder; use AmpHttpClientRequest; use AmpHttpClientResponse; use AmpHttpCookieCookie; use AmpHttpCookieResponseCookieJar; use AmpArtaxCookieNullCookieJar; use AmpArtaxCookieCookieJar; use GuzzleHttpPromisePromiseInterface; use function AmpasyncCall;
3. Создайте метод run() внутри класса Task и передайте контейнер приложения Laravel в качестве аргумента:
public function run(Container $container): Promise { // Ваш код здесь }
4. Внутри метода run() создайте экземпляр HttpBrowser
и передайте ему контейнер приложения и $this
(текущий экземпляр объекта Task):
$httpBrowser = new HttpBrowser($container, $this);
5. Создайте функцию обратного вызова makeHttpConnection()
для отправки запросов через amPHP:
private function makeHttpConnection(Request $request): Promise { $httpClientBuilder = new HttpClientBuilder(); $httpClient = $httpClientBuilder->build(); return $httpClient->request($request); }
6. Используйте makeHttpConnection()
внутри метода run()
для отправки запросов и получения ответов:
public function run(Container $container): Promise { $httpBrowser = new HttpBrowser($container, $this); $request = new Request('https://example.com'); return $httpBrowser->send($request) ->then(function (Response $response) { // Ваш код обработки ответа здесь }); }
7. Для доступа к контейнеру Laravel используйте метод getContainer()
класса HttpBrowser:
public function getContainer(): Container { return $this->container; }
Таким образом, путем использования пакета amphp/laravel-bridge и создания специального класса Task, вы можете сохранить контекст Laravel внутри асинхронных задач, выполняемых в amPHP. Это позволяет вам использовать функциональность Laravel, такую как инъекция зависимости и доступ к сервисам, в вашей асинхронной логике.