Как работает «расширение» фасада хранилища в Laravel и почему мой код ведет себя так странно?

Я хочу добавить дополнительный облачный драйвер в свое приложение lumen следующим образом:

Storage::extend('s3_v2', static function ($app, array $config) {
    return (new FilesystemManager($app))->createS3Driver($config);
});

Итак, это работает. И это проблема. Когда я использую Storage::put()/madeir() и т. д., он работает, даже если по умолчанию у меня есть другой облачный драйвер. Код в закрытии не работает (Log::info() например), может быть потому, что я использую другой облачный драйвер S3, но если я удалю этот фрагмент кода, у меня будет эта ошибка:

Учетные данные должны быть экземпляром Aws\Credentials\CredentialsInterface, ассоциативный массив, который содержит «ключ», «секрет» и необязательный пары ключ-значение "токен", функция поставщика учетных данных или ЛОЖЬ. (500 - внутренняя ошибка сервера)

Если я изменю драйвер на текущий по умолчанию, он будет работать, и вся дополнительная логика в обратном вызове будет выполнена:

Storage::extend('minio', static function ($app, array $config) {
    Log::error('test'); // Log successful output-ed
    return (new FilesystemManager($app))->createS3Driver($config);
});

Это работает... и нет? Как будто он не входит в закрытие, если я использую другой драйвер, но регистрирует этот драйвер... Поэтому, если я расширяю текущий драйвер, он зарегистрирует его и выполнит обратный вызов (???) Так что я очень смущен.

Просто чтобы быть ясным, у меня больше нет другого Storage::extend в моем приложении. И если:

Storage::extend('ASDASDASD', static function ($app, array $config) {
    return (new FilesystemManager($app))->createS3Driver($config);
});

Это также позволяет мне правильно работать с моим текущим облачным драйвером, но обратный вызов не выполняется. Я могу убедиться в этом, открыв консоль minio и увидев там добавленные файлы.

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
0
131
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я нашел ответ на свой вопрос. Метод «расширение» фасада хранилища будет выполняться независимо от заданного имени драйвера и его обратного вызова. Это просто добавление данного обратного вызова в свойство массива экземпляра FilesystemManager с ключом из первого аргумента. Он также выполняет регистрацию всех драйверов из конфигурации, а не только добавленных в первый аргумент.

Другие вопросы по теме