AWSのS3に画像を保存できるようにしたい
DockerでLaravelの開発環境を構築し、投稿機能のついたサイトを作成しています。
投稿を保存するところで詰まっているのでご教授いただけましたら幸いです。
初心者のため、どこが間違っているのかもよく分からないのですがよろしくお願い致します。
こちらの記事を参考に実装しています。
整えていない見えにくい状態で申し訳ありません。
このformで入力し「登録する」を押したところエラーが発生致しました。
発生している問題・エラーメッセージ
Error Class 'League\Flysystem\AwsS3v3\AwsS3Adapter' not found
該当のソースコード
composer require league/flysystem-aws-s3-v3
でインストールしました。
composer.jsonに下記のように記載されているのでインストールはできていると思います。
composer.json
1"league/flysystem-aws-s3-v3": "^2.0"
config/filesystems.phpには以下のように記載致しました。
'cloud' => env('FILESYSTEM_CLOUD', 's3'), 's3' => [ 'driver' => 's3', 'key' => env('AWS_ACCESS_KEY_ID'), 'secret' => env('AWS_SECRET_ACCESS_KEY'), 'region' => env('AWS_DEFAULT_REGION'), 'bucket' => env('AWS_BUCKET'), 'url' => env('AWS_URL'), 'endpoint' => env('AWS_ENDPOINT'), ],
.envにも環境変数を設定致しました。
AWS_ACCESS_KEY_ID=< > AWS_SECRET_ACCESS_KEY=< > AWS_DEFAULT_REGION=ap-northeast-1 AWS_BUCKET=< >
以下がマイグレーションファイルの記述内容です
public
1 { 2 Schema::create('games', function (Blueprint $table) { 3 $table->id(); 4 $table->bigInteger('user_id'); 5 $table->string('name'); 6 $table->text('describe'); 7 $table->integer('play_time'); 8 $table->integer('players_minimum'); 9 $table->integer('players_max'); 10 $table->string('image_path')->nullable(); 11 $table->timestamps(); 12 }); 13 }
以下がモデルの記述内容です
Game.php
1<?php 2 3namespace App\Models; 4 5use Illuminate\Database\Eloquent\Factories\HasFactory; 6use Illuminate\Database\Eloquent\Model; 7 8class Game extends Model 9{ 10 use HasFactory; 11 12 protected $table = "games"; 13 protected $fillable = [ 14 "id", 15 "user_id", 16 "name", 17 "describe", 18 "play_time", 19 "players_minimum", 20 "players_max", 21 "file_name", 22 "file_path", 23 "updated_at", 24 "created_at", 25 ]; 26 27 public function user() 28 { 29 return $this->belongsTo(User::class); 30 } 31}
以下がコントローラーの記述内容です
/** * Show the form for creating a new resource. * * @return \Illuminate\Http\Response */ public function create() { return view('game.create'); } /** * Store a newly created resource in storage. * * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\Response */ public function store(Request $request) { $input = $request->only('user_id', 'name', 'describe', 'play_time', 'players_minimum', 'players_max', 'file_name', 'file_path'); $game = new Game(); $game->user_id = Auth::id(); $game->name = $input["name"]; $game->describe = $input["describe"]; $game->play_time = $input["play_time"]; $game->players_minimum = $input["players_minimum"]; $game->players_max = $input["players_max"]; $image = $request->file('image'); $path = Storage::disk('s3')->putFile('bgame32070', $image, 'public'); $post->image_path = Storage::disk('s3')->url($path); $game->save(); return redirect('/'); }
試したこと
php artisan cache:clear php artisan config:clear php artisan route:clear php artisan view:clear
キャッシュのクリアを試みましたが解決しませんでした。
クラスがないというエラーなのかと思ったのですが該当のファイルにnamespaceの記載はしてありました。
補足情報(FW/ツールのバージョンなど)
Version | |
---|---|
PHP | 7.4.14 |
Laravel | 8.24.0 |
mysql | 8.0.23 |
docker | 20.10.2 |
docker-compose | 1.27.4 |
理解が浅くいろいろな方の記事を参考にしているためご教授いただければ幸いです。
よろしくお願い致します。
追伸
composer require league/flysystem-aws-s3-v3:^1.0
後のエラー
回答1件
あなたの回答
tips
プレビュー