Сбой метода маршрутизации Laravel - PullRequest
0 голосов
/ 17 мая 2018

Это моя HTML-форма;<form action="{{url('admin/users/update/'.$user->id)}}" method="post"> {{csrf_field()}} {{method_field('put')}}

и это мой роутер;Route::post('users/update/{id}', 'UsersController@update');

и это мой контроллер

 public function update($id)
{
    //$id=$_POST['id'];
    $user = \App\User::find($id);
    $user->email = $_POST['email'];
    $user->name = $_POST['name'];
    if ($_POST['password'] != '') {
        $user->password = Hash::make($_POST['password']);

    }
    $user->user_level = $_POST['user_level'];
    $user->location =$_POST['location'];
    $user->gender = $_POST['gender'];
    $user->save();

Мой код не работает.Как я могу это исправить?Ошибка: Symphony \ Component \ HttpKernel \ Exception \ MethodNotAllowedHttpException Нет сообщения

Ответы [ 6 ]

0 голосов
/ 17 мая 2018

Вам необходимо удалить {{method_field ('put')}} .Поскольку этот код означает, что ваша форма отправляется с помощью метода put, а в маршрутизаторе нет пут.

Решение 1. Удалить {{method_field ('put')}}} .

Решение 2. Измените определение маршрутизатора на:

Route::put('users/update/{id}', 'UsersController@update');
0 голосов
/ 17 мая 2018

Я предлагаю вам установить Laravel Collection, это поможет добавить токен в форму Проверьте эту документацию здесь https://laravelcollective.com/docs/5.2/html Пожалуйста, сообщите мне, если это работает.

0 голосов
/ 17 мая 2018

вы объявили @csrf в форме.

    use App\User;
      use Auth;
      use Illuminate\Http\Request; 

         public function update(Request $r,$id)
        {
            //$id=$_POST['id'];
            $user = User::find($id); // if auth is necessary  $user = Auth::id();
            $user->update([

          'email' => $r->email,
          'name' => $r->name,
          'password' => Hash::make($r['password']),
          'user_level' => $r->user_level,
          'location'=> $r->location,
          'gender'  => $r->gender


    ]);     
}

в вашей web.php

Route::post('/user/update/{id}', [
  'uses' => 'UsersController@update',
  'as' => 'user.store'
]);

в вашей форме

<form class="" action="{{route('user.store')}}" method="post">
  @csrf
0 голосов
/ 17 мая 2018

Использовали ли вы приведенный ниже код в своей форме:

{!! Form::token() !!}

или вы можете попробовать использовать "put" вместо "get"

0 голосов
/ 17 мая 2018

Попробуйте использовать HTTP-запрос через внедрение зависимостей

Сначала объявите класс Illuminate \ Http \ Request

use Illuminate\Http\Request;

public function update(Request $request, $id)
{
    //$id=$_POST['id'];
    $user = \App\User::find($id);
    $user->email = $request->input('email');
    $user->name = $request->input('name');
    if ($request->input('password') != '') {
        $user->password = Hash::make($request->input('password'));

    }
    $user->user_level =$request->input('userlevel');
    $user->location =$request->input('location');
    $user->gender = $request->input('gender');
    $user->save();
}
0 голосов
/ 17 мая 2018

Вы должны попробовать это:

Маршрут :

Route::post('users/update/{id}', 'UsersController@update')->name('user.update);

Форма :

<form action="{{['route' => ['user.update', $user->id]}}" method="post">
...