Ошибка «Нет сообщения» laravel - при попытке обновить информацию об учетной записи пользователя - PullRequest
0 голосов
/ 29 апреля 2018

Я получаю сообщение об ошибке "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>

Ответы [ 3 ]

0 голосов
/ 29 апреля 2018

попробуйте этот метод:

public function update_account(Request $request, $id) 
{
    $user = User::find($id)
    $user->name = $request->name;
    $user->email = $request->email;
    $user->update();

    return redirect('/profile');
}
0 голосов
/ 29 апреля 2018

Для тех, кому может понадобиться один и тот же ответ, чтобы исправить это, мне пришлось поработать с ним довольно долго и использовать биты из предложенных ответов, чтобы полностью решить проблему.

  1. Я изменил метод маршрута, чтобы поместить в web.php.
  2. Заменил мою функцию update_account на ответ @TonzFale, но заменил $user = User::find($id) на $user = User::find(Auth::user()->id);.
0 голосов
/ 29 апреля 2018

У вас нет маршрута, который мог бы обработать запрос PUT на «обновление профиля». В вашей форме вы определили следующую функцию.

{{ method_field('put') }}

Эта вспомогательная функция создает скрытое поле ввода, которое будет использоваться Laravel для обработки текущего запроса только как PUT.

Чтобы это работало, вы должны либо сделать запрос POST, удалив указанную выше вспомогательную функцию, либо изменить метод маршрута на PUT.

Route::put('profile-update', 'userController@update_account');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...