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