Laravel

Laravelのユーザー情報を更新する方法

いつもご利用ありがとうございます。このブログは、広告費によって運営されています。

⇨ Laravel 記事の目次はこちら

Laravel のユーザー情報を更新する方法についてまとめました。

Laravel Framework 8.83.8

これからすること

users テーブルに name というカラムがあって、

その name を更新する処理を書きます。

前提

認証(登録やログイン)が既にできている

ユーザー情報を更新する方法

web.php にこれから追記する処理のためのルーティングを追加する

web.php に追記します(この記事では Laravel8 の書き方をしています。Laravel6 以前で書く場合は、この記事を参照してみてください。

use App\Http\Controllers\UserController;
Route::post('/user/update',[UserController::class,'update'])->name('user.update');

UserController を作成する

コマンドでファイルを作成します。

php artisan make:controller UserController

UserController.php が生成されました。

UserController に追記する

<?php

namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Auth;

class UserController extends Controller
{
    public function update(Request $request)
    {
        $user = Auth::user();
        dd($user);
    }
}

中途半端ではありますが、一旦このように書いておきます。

表示ファイルを編集する(実際に入力フォームがあるページに追記する)

***.blade.php

<form method="POST" action="{{route('user.update')}}">
  @csrf
  <input name="name" />
  <button>更新する</button>
</form>

今作られた、「更新する」ボタンを押してみます!

何やら黒い画面で

App\Models\User {#996 ▼
  #fillable: array:3 [▶]
  #hidden: array:2 [▶]
  #casts: array:1 [▶]
  #connection: "mysql"
  #table: "users"
  #primaryKey: "id"
  #keyType: "int"
  +incrementing: true
  ....
}

などと出たら OK です。

これは、Controller に書いた、

dd($user);

が画面に出力されていて、「ここまで処理がちゃんと渡ってきた」という証明になります。

慣れないうちは、ルーティングの指定などでミスるため「関数自体が動いていない」ということがあり得るので、まず関数が動くことを確認しています。

コントローラーを更新する

さきほど書いた update という関数の中を変更します

    public function update(Request $request)
    {
        $user = Auth::user();
        dd($request->name);
    }

今度は実際にテキストを入力して更新ボタンを入力してみましょう。

入力したテキスト

が画面に表示されれば OK です。

<input name="name" />
<!-- nameというリクエストがControllerに渡る -->

ここで name を”name”と指定しているため、Laravel 側では

$request->name;

と受け取ることができます。

これらが全て動けばあとは更新の処理を書くだけです!

    public function update(Request $request)
    {
        $user = Auth::user();
        $user->name = $request->name;
        $user->save();
        // return redirect()->route('');//保存後はリダイレクトさせたいページを指定したりする
    }

とします。実際に変更してうまくいけば OK です!

絶対にやってはいけないやり方

パラメーターでユーザーを判別しようとするのはダメ

public function update($userId, Request $request)
{
  //このやり方はダメ
  $user = User::find($userId);
  //以下同じ
}

リクエストでユーザーを判別しようとするのはダメ

<input type="hidden" name="userId" />
public function update(Request $request)
{
  //このやり方はダメ
  $user = User::find($request->userId);
  //以下同じ
}

これらのやり方はブラウザでユーザーの ID が書かれている部分を書き換えれば別ユーザーの情報を更新することができてしまいます

なので、更新したいユーザーの情報を得る方法は、必ず

Auth::id();
Auth::user();

を使うようにしましょう。

まとめ

以上です。

誰かの参考になればと思います。

感想・苦情は TwitterDM にご連絡ください。

それでは!

人気記事

PHP7.4 + Laravel6 のプロジェクトを AWS EC2 にデプロイする

【laravel-breadcrumbs】Laravel でパンくずリストを実装する