🪣

Laravel 8以降のファイルストレージで動的にS3のバケットを変更する方法

2023/04/26に公開

表題の件であまり情報がなく微妙にハマったので自分なりの解決策を残しておきます。

環境

PHP 8.1.18
Laravel 9.19

解決策

$s3_bucket_name = 'S3_BUCKET_NAME';

$disk = Storage::build([
    ...config('filesystems.disks.s3'),
    'bucket' => $s3_bucket_name,
]);

Storage::build というメソッドを利用して、オンデマンドでディスクを作成しています。
ここでは、PHP8.1で追加された文字列キー配列のアンパックを用いて既存のS3情報を展開した上で、バケット名のみを上書きしています。
もちろん、すべての情報をべた書きして作成することも可能です。
なお、公式ドキュメントによると、Laravel 8 から Storage::build が追加されたようです。

終わりに

ドキュメントに当たるのはやっぱり大事

GitHubで編集を提案

Discussion