>

"MethodNotAllowedHttpException 오류가 발생합니다. 사용자의 양식을 제출할 때 메시지가 표시되지 않습니다. 사용자 테이블을 업데이트하기위한 것입니다. 같은 페이지에 두 개의 게시물 양식과 두 개의 게시물 경로가 있는데 그와 관련이 있습니까?

모든 경로와 충돌 할 수있는 다른 형식을 포함하겠습니다.

web.php

Route::get('profile','userController@profile');
Route::post('profile', 'userController@update_avatar');
Route::post('profile-update', 'userController@update_account'); //this ones not working

userController.php

<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\User;
use Auth;
use Image;
class UserController extends Controller
{
    //
    public function profile()
    {
        return view('profile', array('user' => Auth::user()) );
    }
    public function update_avatar(Request $request)
    {
        if($request->hasFile('avatar')){
            $avatar = $request->file('avatar');
            $filename = time() . '.' . $avatar->getClientOriginalExtension();
            Image::make($avatar)->resize(300,300)->save( public_path('/uploads/avatars/' . $filename) );
            $user = Auth::user();
            $user->avatar = $filename;
            $user->save();
        }
        return view('profile', array('user' => Auth::user()) );
    }
    public function update_account(Request $request, $id) //the function with the error
    {
         User::update([ 
                'id' => Auth::user()->id,
                'name' => $request->name,
                'email' => $request->email
            ]);
            return redirect('/profile');
    }
}

profile.blade.php

<img src="/uploads/avatars/{{ $user->avatar }}" style="width:150px;height:150px;float:left;border-radius:50%;margin-right:25px">    
                <h2>{{ $user->name }}'s Profile</h2>
                <form enctype="multipart/form-data" action="/profile" method="post">
                    <label>Update Profile Image</label>
                    <input type="file" name="avatar">
                    <input type="hidden" name="_token" value="{{ csrf_token() }}">
                    <input type="submit" class=" btn btn-sm btn-light" style="color:#2b2b2b;" value="Update Image">
                </form>
                <form method="post" action="/profile-update"> <!-- The form with the error -->
                    {{ method_field('put') }}
                    {{ csrf_field() }}
                    <input type="hidden" name="_method" value="PUT" />
                    <label>Username</label>
                    <input type="text" name="name" class="form-control" value="{{ $user->name }}">
                    <label>Email</label>
                    <input type="email" name="email" class="form-control" value="{{ $user->email }}">
                    <input type="submit" id="update-account" class="btn btn-success" value="Update">
                </form>


  • 답변 # 1

    이 방법을 시도하십시오 :

    public function update_account(Request $request, $id) 
    {
        $user = User::find($id)
        $user->name = $request->name;
        $user->email = $request->email;
        $user->update();
        return redirect('/profile');
    }
    
    

  • 답변 # 2

    "profile-update"에 대한 PUT 요청을 처리 할 수있는 경로가 없습니다. 양식에서 다음 기능을 정의했습니다.

    {{ method_field('put') }}
    
    

    이 헬퍼 함수는 Laravel이 현재 요청을 PUT으로 만 처리하기 위해 사용할 숨겨진 입력 필드를 생성합니다.

    이 작업을 수행하려면 위의 도우미 기능을 제거하여 요청을 POST로 설정하거나 경로 방법을 PUT으로 변경해야합니다.

    Route::put('profile-update', 'userController@update_account');
    
    

  • 답변 # 3

    동일한 답변이 필요할 수있는 사람들을 위해이 문제를 해결하려면 꽤 오랫동안 게임을해야했고 제안 된 답변의 비트를 사용하여 문제를 완전히 해결했습니다.

    <올>

    web.php에 라우트 방법을 변경했습니다.

    업데이트 계정 기능을 @TonzFale 답변으로 대체했지만 $user = User::find($id) 로 교체 $user = User::find(Auth::user()->id); 와 함께 .

관련 자료

  • 이전 c# - 숫자가 포함 된 ListBox 항목 감지 및 수정
  • 다음 regex - 펄 정규 표현식에서 \ 1은 어떻게 작동합니까?