Laravel: Route returns 表单提交上的 404 页面
Laravel: Route returns 404 page on form submit
已解决
web.php 路线:
Route::post('/admin/users/action', [
'uses' => 'UserController@massAction',
'as' => 'user.massAction'
]);
形式:
<form id="users-form" role="form" method="POST" action="{{ url('/admin/users/action') }}">
{{ csrf_field() }}
...
</form>
未达到的 UserController massAction 方法:
public function massAction(Request $request)
{
$userIds = $request->input('users');
$user = new User();
switch ($request->input('mass-action')) {
case 1:
$user->deleteUser($userIds);
$request->session()->flash('message-success', 'User(s) deleted!');
break;
}
return redirect()->back();
}
在提交表单时,它应该 return 返回一条消息,但它甚至没有到达控制器。在方法内设置断点可确认它没有到达它。
它只是转到 /admin/users/action 和 return 的 404 错误,因为此页面不存在。它应该转到 UserController 内的 massAction 方法并重定向回提交表单的页面。
我正在为产品、属性等做同样的事情,而且效果很好。只有这条路线和方法行不通。同一 UserController 中的其他路由有效。
尝试使用 route() 而不是 url()。
将动作从 url() 更改为 route() 并检查一下。
action="{{ route('user.massAction') }}"
我认为您需要像这样更改路线:
web.php 路线:
Route::post('/admin/users/action','UserController@massAction')->name('user.massaction');
形式:
<form id="users-form" role="form" method="POST" action="{{ route('user.massaction') }}">
{{ csrf_field() }}
...
</form>
问题出在其中一个输入字段中。不知道为什么它之前没有抛出任何错误甚至没有到达控制器。
这个
<input class="entity-select" type="checkbox" name="specifications[{{ $user->id }}][id]" value="{{ $user->id }}">
需要这样
<input class="entity-select" type="checkbox" name="users[{{ $user->id }}[id]" value="{{ $user->id }}">
将其改回错误的输入字段名称后,它现在会抛出错误并到达 UserController 中的断点。也许一些视图缓存问题?如果是这样的话。
像这样在 CSRF 之后使用 put 形式。
@csrf
@if(isset($category))
@method('PUT')
@endif
已解决
web.php 路线:
Route::post('/admin/users/action', [
'uses' => 'UserController@massAction',
'as' => 'user.massAction'
]);
形式:
<form id="users-form" role="form" method="POST" action="{{ url('/admin/users/action') }}">
{{ csrf_field() }}
...
</form>
未达到的 UserController massAction 方法:
public function massAction(Request $request)
{
$userIds = $request->input('users');
$user = new User();
switch ($request->input('mass-action')) {
case 1:
$user->deleteUser($userIds);
$request->session()->flash('message-success', 'User(s) deleted!');
break;
}
return redirect()->back();
}
在提交表单时,它应该 return 返回一条消息,但它甚至没有到达控制器。在方法内设置断点可确认它没有到达它。
它只是转到 /admin/users/action 和 return 的 404 错误,因为此页面不存在。它应该转到 UserController 内的 massAction 方法并重定向回提交表单的页面。
我正在为产品、属性等做同样的事情,而且效果很好。只有这条路线和方法行不通。同一 UserController 中的其他路由有效。
尝试使用 route() 而不是 url()。
将动作从 url() 更改为 route() 并检查一下。
action="{{ route('user.massAction') }}"
我认为您需要像这样更改路线:
web.php 路线:
Route::post('/admin/users/action','UserController@massAction')->name('user.massaction');
形式:
<form id="users-form" role="form" method="POST" action="{{ route('user.massaction') }}">
{{ csrf_field() }}
...
</form>
问题出在其中一个输入字段中。不知道为什么它之前没有抛出任何错误甚至没有到达控制器。
这个
<input class="entity-select" type="checkbox" name="specifications[{{ $user->id }}][id]" value="{{ $user->id }}">
需要这样
<input class="entity-select" type="checkbox" name="users[{{ $user->id }}[id]" value="{{ $user->id }}">
将其改回错误的输入字段名称后,它现在会抛出错误并到达 UserController 中的断点。也许一些视图缓存问题?如果是这样的话。
像这样在 CSRF 之后使用 put 形式。
@csrf
@if(isset($category))
@method('PUT')
@endif