@mar-gitacount (mar mar)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

Laravelの削除機能が実装できない、、

今Laravelにて記事作成のページを作成しています。

ログイン機能を実装した後に、ユーザー自身でアカウントを物理削除する処理を書いたのですが、削除できずに困っています。
ddでコントローラの値を確認しようとしたところ値を表示しなかったのでそれも原因があるのかもしれませんがなぜ呼ばれないのかもわかりません。
まずルーティングでUserControllerを利用してそのなかのdestroyメソッドを利用して情報を削除する流れです、、

web.php
Route::delete('/user/{id}', [App\Http\Controllers\UserController::class, 'destroy']);

UserController.php
public function destroy($id)
    {
        //
        /**
         * 
         *  ここでユーザー情報を取得している。
         * 
         * 
         * */
        /* User::destroy($id);
        return redirect('/'); */
        $user = User::find($id);
     dd($user);値が呼ばれない
        $user->delete();
        return redirect('/');

    }

ユーザがログインした後のページ

home.blade.php
 <form action="/{{ Auth::user()->id }}" method="Post">
                {{ csrf_field() }}
                {{ method_field('DELETE') }}
                    <button type="submit" class="btn btn-danger"><i class="fa fa-trash"></i>削除</button>
  </form>

ぜひお力を貸していただければ幸いです。

0 likes

2Answer

気になった点をいくつか挙げます。

formの送り先→「/ユーザーid」、
laravel側→「/user/ユーザーid」で
routeが異なっているっぽい?

そもそもユーザーが取得できていない可能性。
dd(User::all())とかで、データがおおければwhereExistsとかで
存在確認どうでしょうか。

0Like

Comments

  1. @mar-gitacount

    Questioner

    ご回答ありがとうございます。ご指摘の通りformとルーティングの指定が異なっているので、ルーティングでname関数を利用してhome.blade.phpに読み込ませる処理を書きましたがダメでした、、
    以下にソースコードを貼り付けます。
    尚、homecontrollerを利用して削除することにしました。
    dd()して確認したところ、個々のユーザーの情報は表示されるので削除できたとおもうのですが、、なにか方法はありますでしょうか、、
  2. ご確認ありがとうございます。
    うーん、そうなると切り分けて確認していった方が良いかもですね。
     
    個人的にはやっぱりフロント側が怪しいように思います。
    もし試せるなら、postmanなどのツールで確認した方が良いかもしれません。
    (レスポンスの中身も見られるのでオススメです)
     
    バックエンド側であるとしたら……、
    山勘ですが「ログイン中のユーザーは削除できない」みたいなルールがあるかも?
     
    ユーザー取得後、そのユーザーをログアウトさせたあとに削除する。
    みたいな処理を試してみてはいかがでしょう?
  3. @mar-gitacount

    Questioner

    なんとか削除機能を実装することができました。原因としてはおそらくにはなってしまうのですが、>php artisan route:listコマンドを実行した際にその一覧に
    Route::delete('/home',[App\Http\Controllers\UserController::class, 'destroy'])->name('user_delete')->middleware('auth');
    がなかったので、一度キャッシュクリアを実行した後にもう一度リストを確認した際にDELETEコマンドを確認することができたので、おそらくそれが原因ではなかったのかと思います、、
    対応していただきありがとうございました。

Your answer might help someone💌