PHP Laravel 6.20.35にてマッチングサイトを制作しています。
新規登録時に画像の登録がなければ、デフォルトの画像をユーザー画像として登録したいのですが、画像登録無しで新規登録を行うと「Undefined index: img_name」となります。
現状は以下のようになっています。
RegisterController.php
PHP
1 protected function create(array $data) 2 { 3 4 // ---ここから追加--- 5 //引数 $data から name='img_name'を取得(アップロードするファイル情報) 6 $imageFile = $data['img_name']; 7 8 //$imageFileからファイル名を取得(拡張子あり) 9 $filenameWithExt = $imageFile->getClientOriginalName(); 10 11 //拡張子を除いたファイル名を取得 12 $fileName = pathinfo($filenameWithExt, PATHINFO_FILENAME); 13 14 //拡張子を取得 15 $extension = $imageFile->getClientOriginalExtension(); 16 17 // ファイル名_時間_拡張子 として設定 18 $fileNameToStore = $fileName.'_'.time().'.'.$extension; 19 20 //画像ファイル取得 21 $fileData = file_get_contents($imageFile->getRealPath()); 22 23 //拡張子ごとに base64エンコード実施 24 if ($extension = 'jpg'){ 25 $data_url = 'data:image/jpg;base64,'. base64_encode($fileData); 26 } 27 28 if ($extension = 'jpeg'){ 29 $data_url = 'data:image/jpg;base64,'. base64_encode($fileData); 30 } 31 32 if ($extension = 'png'){ 33 $data_url = 'data:image/png;base64,'. base64_encode($fileData); 34 } 35 36 if ($extension = 'gif'){ 37 $data_url = 'data:image/gif;base64,'. base64_encode($fileData); 38 } 39 40 //画像アップロード(Imageクラス makeメソッドを使用) 41 $image = Image::make($data_url); 42 43 //画像を横400px, 縦400pxにリサイズし保存 44 $image->resize(400,400)->save(storage_path() . '/app/public/images/' . $fileNameToStore ); 45 46 //createメソッドでユーザー情報を作成 47 return User::create([ 48 'name' => $data['name'], 49 'email' => $data['email'], 50 'password' => Hash::make($data['password']), 51 'self_introduction' => $data['self_introduction'], 52 'sex' => $data['sex'], 53 'img_name' => $fileNameToStore, 54 ]); 55 }
add_column_to_users_table.phpを
PHP
1 public function up() 2 { 3 Schema::table('users', function (Blueprint $table) { 4 $table->string('self_introduction', 500)->nullable(); //詳細情報 5 $table->tinyInteger('sex')->default(0); //性別 6 $table->string('img_name')->default(''); //画像ファイル 7 }); 8 }
viewファイルregister.blade.phpを
PHP
1 <label for="file_photo" class="rounded-circle userProfileImg"> 2 <div class="userProfileImg_description">画像をアップロード</div> 3 <i class="fas fa-camera fa-3x"></i> 4 <input type="file" id="file_photo" name="img_name"> 5 </label>
User.php
PHP
1 protected $fillable = [ 2 'name', 'email', 'password', 'self_introduction', 'sex', 'img_name', 3 ];
としていました。
この状況だと画像登録なしで新規登録すると、「Undefined index: img_name」 というエラーになります。
マイグレーションファイルadd_column_to_users_table.php で
PHP
1'img_name' => $fileNameToStore,
としている箇所を
PHP
1 $table->string('img_name')->default('/storage/images/no_img.png');
とすれば、画像登録なしで新規登録した場合でも 「default('/storage/images/no_img.png');」 が登録できると思い
新規マイグレーションファイルを作成
PHP
1 $table->string('default_img')->default('/storage/images/no_img.png');
と設定
viewファイルregister.blade.php
PHP
1 <label for="file_photo" class="rounded-circle userProfileImg"> 2 <div class="userProfileImg_description">画像をアップロード</div> 3 <img src="/storage/images/no_img.png"alt="デフォルト画像"> 4 <input type="file" id="file_photo" name="img_name"> 5 </label>
RegisterController.phpを以下のように修正しました。
PHP
1 //createメソッドでユーザー情報を作成 2 return User::create([ 3 'name' => $data['name'], 4 'email' => $data['email'], 5 'password' => Hash::make($data['password']), 6 'self_introduction' => $data['self_introduction'], 7 'sex' => $data['sex'], 8 'img_name' => $fileNameToStore, 9 'default' => $data['/storage/images/no_img.png'],
しかし、これでも画像登録なしで新規登録した場合「Undefined index: img_name」 というエラーが表示されます。
どうすれば、新規登録時に画像の登録がなければデフォルトの画像を設定できるようにできるでしょうか?
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/10/20 09:13 編集
2021/10/20 08:40
2021/10/20 08:45
2021/10/20 09:33 編集
2021/10/20 10:44 編集
2021/10/20 16:19
2021/10/21 01:55
2021/10/21 12:28