【发布时间】:2017-11-13 22:01:31
【问题描述】:
最近我开始了一个 Laravel 5.4 项目,我发现了一些我不太理解的东西,我发布了这个问题,希望能解决这个问题,看看它是预期的行为还是错误。
问题是,我正在提交一个如下所示的更新表单:
<form id="post-form" action="{{url('admin/posts/'.$post->id)}}" method="POST">
{{ csrf_field() }}
{{ method_field('PUT') }}
<!-- Some fields -->
</form>
我尝试在控制器方法上验证该请求:
$validator = Validator::make($request->all(), [
// Fields to validate
]);
if ($validator->fails()) {
return back()
->withErrors($validator)
->withInput();
}
我的问题出现在验证失败并执行重定向时,因为我收到代码 405 错误MethodNotAllowedHttpException。
确实,url是对的,但是方法不对,如HTTP headers所示:
Request URL:https://myproject.dev/admin/posts/1/edit
Request Method:PUT
Status Code:405
Remote Address:127.0.0.1:443
Referrer Policy:no-referrer-when-downgrade
它应该是 GET 而不是 PUT。我最好的猜测是使用 $request 对象的 _method 属性来重定向,而不是使用 GET 方法。
重定向调用之前的dump($request->all()):
array:19 [
"_token" => "XOtwEeXwgnuc8fNqCwxkdO992bU6FObDwTuCg1cJ"
"_method" => "PUT"
//fields
]
有些事情我已经尝试过但没有运气:
- 从请求中取消设置 _method:
unset($request['_method']) -
根据该名称命名路由和重定向:
// The routes file (routes/web.php) Route::get('posts/{id}/edit', 'PostsController@edit')->name('edit-post'); // The redirect (controller) return redirect()->route('edit-post', ['id' => 1]) ->withErrors($validator) ->withInput(); -
在重定向中指定 url
// The redirect (controller) return redirect('admin/posts/'.$post->id.'/edit') ->withErrors($validator) ->withInput();
那么我怎样才能使用普通的 GET 方法执行重定向呢?这是预期的行为吗?提前感谢您,非常感谢您的任何建议或提示。
【问题讨论】:
标签: php laravel http-headers laravel-5.4 http-redirect