Laravel路由用户更新MethodNotAllowedHttpException

时间:2017-06-12 14:15:55

标签: php laravel exception routing formbuilder

我正在使用Laravel 5.4,我的UsersController中的更新功能存在一些问题。 我总是得到一个“MethodNotAllowedHttpException”。我已经发现,当你的表格是例如,它可能会发生。发布,但是路由是得到的 - 这不应该是我猜的情况......

我只会给你我的代码片段,也许你已经可以在那里看到它了。所以你知道:我对Laravel来说是全新的!

users.blade.php

<selenium.webdriver.firefox.webelement.FirefoxWebElement (session="9003fc6a-d8be-472b-bced-94fffdb5fdbe", element="27e1638a-0e37-411d-8d30-896c15711b49")>

通过web.php进行路由

@extends('layouts.app')

@section('content')


{!! Form::model($user, ['method' => 'PATCH', 'route' => ['users.update',    $user->id]]) !!}

<div class="form-group">
{!! Form::label('email', 'E-Mail:', ['class' => 'control-label']) !!}
{!! Form::text('email', null, ['class' => 'form-control']) !!}
</div>

<div class="form-group">
{!! Form::label('old_password', 'Old assword:', ['class' => 'control- label']) !!}
{!! Form::password('old_password',['class' => 'form-control']) !!}
</div>
<div class="form-group">
{!! Form::label('password', 'New password:', ['class' => 'control-label']) !!}
{!! Form::password( 'password', ['class' => 'form-control']) !!}
</div>
<div class="form-group">
{!! Form::label('password', 'Repeat new password:', ['class' => 'control-label']) !!}
{!! Form::password( 'password_confirmation', ['class' => 'form-control']) !!}
</div>

{!! Form::submit('Update', ['class' => 'btn btn-primary']) !!}

{!! Form::close() !!}

{!! Form::model($user, ['method' => 'DELETE', 'route' => ['users.destroy',     $user->id]]) !!}

{!! Form::submit('Delete', ['class' => 'btn btn-danger']) !!}
{!! Form::close() !!}

@stop

在UsersController.php中更新

Route::resource('users', 'UsersController');

当我做php artisan route:list时,它告诉我:

public function update(Request $request, $id)
{
// $user = Auth::user();
$user = User::findOrFail($id);

$this->validate($request, [
  'email' => 'required|string|email|max:255|unique:users',
  'old_password' => 'nullable|string|min:6|confirmed',
  'password' => 'nullable|string|min:6|confirmed',
  'password_comfirmation' => 'nullable|string|min:6|confirmed',
]);

$old_password = $request->old_password;
$password = $request->password;
$password_confirmation->$request->password_confirmation;


if (Hash::check($old_password, $hashedPassword)) {
  if($password == $password_confirmation){

    $user->email = $request->email;
    $user->password = Hash::make($password);
    $user->update();


  }
  else {
    Session::flash('flash_message', 'Password Confirmation not equal!');
    return redirect()->back();
  }
}
else {
  Session::flash('flash_message', 'Old password wrong!');
  return redirect()->back();
}


Session::flash('flash_message', 'User successfully added!');

return redirect()->back();
}

我还没有真正尝试更新功能,因为我甚至没有达到这一点....你有任何提示吗?

---- ---- EDIT

这是错误: It looks as if it doesn't allow POST - but I don't even use POST. I tried the POST option in the comments as well, but I still get the same error...

我有一个用于完全相同的用户的destroy函数(但是方法:DELETE)并且它不会抛出任何异常并且一切正常。

非常感谢! :) 纳丁

1 个答案:

答案 0 :(得分:0)

使用方法PUT而不是PATCH

{!! Form::model($user, ['method' => 'PUT', 'route' => ['users.update',    $user->id]]) !!}