Laravel初学者です。
オリジナルアプリを作成しているのでその過程を記事にしています。
理解が曖昧なところも多いため、ご指摘等ありましたらご連絡いただければ幸いです。
今回は
Error Class 'League\Flysystem\AwsS3v3\AwsS3Adapter' not found
が出たのでその解決方法を記録として残します。
エラーが出るまでの流れを記載するので長くなってます。
環境
Version | |
---|---|
PHP | 7.4.14 |
Laravel | 8.24.0 |
mysql | 8.0.23 |
docker | 20.10.2 |
docker-compose | 1.27.4 |
何をしようとしたのか
こちらの記事を参考にAWSで画像を保存できるようにしようとしました。
ソースコード
<h1>新規作成</h1>
<form action="{{ route('game.store') }}" method="POST" id="new">
@csrf
<div>
<label>名前</label><br />
<input type="text" name="name" value="{{old('name')}}">
</div>
<div>
<label>画像</label><br />
<input type='file' name="image" accept="image/png, image/jpeg">
</div>
<div>
<label>説明</label><br />
<textarea id="new" name="describe" value="{{old('describe')}}"></textarea>
</div>
<input type="submit" value="登録する">
</form>
一般的なFORMです。
storeメソッドで保存しようと思いました。
public function up()
{
Schema::create('games', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->text('describe');
$table->string('image_path')->nullable();
$table->timestamps();
});
}
上記はマイグレーションファイルのカラムの構成です。
class Game extends Model
{
use HasFactory;
protected $table = "games";
protected $fillable = [
"id",
"name",
"describe",
"image_path",
"updated_at",
"created_at",
];
}
上記はモデルの記述です。
実装の流れ
①ails, Laravel(画像アップロード)向けAWS(IAM:ユーザ, S3:バケット)の設定
でAWSのを使うための設定をする
②LaravelでAWS S3へ画像をアップロードする
この記事を参考に進めました。
記事の通りに最後まで進め、いざ投稿ができるか確認してみようとsubmitを押すと
上記のように
Error Class 'League\Flysystem\AwsS3v3\AwsS3Adapter' not found
のエラーになりました。
素直にエラー文をみると「クラスの定義がされていないとのこと」でnamespaceやuseが定義されていないのか
と思いましたが、該当のファイルを見てみたらきちんと定義されていました。
flysystem-aws-s3-v3
がインストールされていないのかと思いましたが
"league/flysystem-aws-s3-v3": "^2.0"
と、composer.jsonに記載されていたのでインストールされています。
念のため、再度参考にした記事の通りに
composer require league/flysystem-aws-s3-v3
を試してみたところ
上記のようなエラーが出ました。
teratailで質問
困ったのでteratailで質問させていただいたところ
「上記のエラー文を見る限りleague/flysystem
のバージョンが古くてleague/flysystem-aws-s3-v3
の2.0以上に対応していないんじゃないでしょうか。
league/flysystem-aws-s3-v3
のほうを対応しているバージョンに下げるか、league/flysystem
のバージョンを上げるしかないと思います。」
と丁寧に回答いただきました。
こちらが同じようなエラーが出た方の記事です。
上記記事を参考にcomposer require league/flysystem-aws-s3-v3:"^1.0"
とバージョンを指定してインストールしてみようと思います。
COMPOSER_MEMORY_LIMIT=-1 composer require league/flysystem-aws-s3-v3:"^1.0"
私は上記のようにメモリ不足を一時的に解消するCOMPOSER_MEMORY_LIMIT=-1
をつけてインストールしました。
(Fatal error: Allowed memory size of 1610612736 bytes exhaustedとエラーが出た場合は`COMPOSER_MEMORY_LIMIT=-1'をつけます)
そうすると
上記のように
最後killed
で止まってしましました。
これはメモリ不足で負荷がかかる前に勝手に止まってしまう動作のようです。
こちらの記事を参考にメモリを増やしました。
その後
COMPOSER_MEMORY_LIMIT=-1 composer require league/flysystem-aws-s3-v3:^1.0
を再実行し無事に成功しました。
"league/flysystem-aws-s3-v3": "^1.0"
成功した後はcomposer.jsonのバージョンも1.0になっていました。
うまくいかない時はcomposer install
を試すのもいいみたいです。