【问题标题】:Laravel: Route returns 404 page on form submitLaravel:路由在表单提交时返回 404 页面
【发布时间】:2017-10-07 15:12:27
【问题描述】:

已解决

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();
}

在表单提交时,它应该返回一条消息,但它甚至没有到达控制器。在方法内设置断点确认它没有到达它。

它只是转到 /admin/users/action 并返回 404 错误,因为此页面不存在。它应该转到 UserController 中的 massAction 方法并被重定向回提交表单的页面。

我正在为产品、属性等做同样的事情,而且效果很好。只有这种路线和方法不起作用。同一个 UserController 中的其他路由工作。

【问题讨论】:

  • 如果您有任何路由组,您可能需要php artisan route:cache
  • 我没有任何群组

标签: laravel controller routes laravel-5.3


【解决方案1】:

尝试使用 route() 代替 url()。

将操作从 url() 更改为 route() 并检查一下。

action="{{ route('user.massAction') }}"

【讨论】:

    【解决方案2】:

    我认为您需要更改路线,例如:

    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>
    

    【讨论】:

    • 试过了,没用。正如我所说,我已经有 massAction 路由,就像我发布的那样,但是对于不同的控制器并且它们可以工作,但是由于某种原因这个没有。
    【解决方案3】:

    问题出在某个输入字段中。不知道为什么它之前没有抛出任何错误甚至没有到达控制器。

    这个

    <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 中到达断点。也许一些视图缓存问题?如果是这样的话。

    【讨论】:

      【解决方案4】:

      像这样在 CSRF 之后的表单中使用 put。

      @csrf
      	@if(isset($category))
      		@method('PUT')
      	@endif

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-01-31
        • 2021-03-30
        • 1970-01-01
        • 1970-01-01
        • 2021-07-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多