【问题标题】:Laravel 5.6 - 404 though route definedLaravel 5.6 - 404 虽然定义了路由
【发布时间】:2018-12-19 19:30:35
【问题描述】:

试图访问 admin/users/multidel 并给我一个 404 错误

Chrome 控制台日志:

DELETE http://****.test/admin/users/multidel 404 (Not Found)

web.php

Route::group(['middleware'=>'admin'], function(){
    Route::get('/admin', 'AdminController@index')->name('admin.home');;

    Route::delete('admin/users/multidel', 'AdminUsersController@multiDel')->name('users.multidel');
    Route::resource('admin/users', 'AdminUsersController');
});

php 工匠路线:列表

+--------+-----------+-------------------------+------------------+------------------------------------------------------------------------+--------------+
| Domain | Method    | URI                     | Name             | Action                                                                 | Middleware   |
+--------+-----------+-------------------------+------------------+------------------------------------------------------------------------+--------------+
|        | GET|HEAD  | /                       |                  | App\Http\Controllers\HomeController@index                              | web,auth     |
|        | GET|HEAD  | admin                   | admin.home       | App\Http\Controllers\AdminController@index                             | web,admin    |
|        | POST      | admin/users             | users.store      | App\Http\Controllers\AdminUsersController@store                        | web,admin    |
|        | GET|HEAD  | admin/users             | users.index      | App\Http\Controllers\AdminUsersController@index                        | web,admin    |
|        | GET|HEAD  | admin/users/create      | users.create     | App\Http\Controllers\AdminUsersController@create                       | web,admin    |
|        | DELETE    | admin/users/multidel    | users.multidel   | App\Http\Controllers\AdminUsersController@multiDel                     | web,admin    |
|        | PUT|PATCH | admin/users/{user}      | users.update     | App\Http\Controllers\AdminUsersController@update                       | web,admin    |
|        | GET|HEAD  | admin/users/{user}      | users.show       | App\Http\Controllers\AdminUsersController@show                         | web,admin    |
|        | DELETE    | admin/users/{user}      | users.destroy    | App\Http\Controllers\AdminUsersController@destroy                      | web,admin    |
|        | GET|HEAD  | admin/users/{user}/edit | users.edit       | App\Http\Controllers\AdminUsersController@edit                         | web,admin    |
|        | GET|HEAD  | api/user                |                  | Closure                                                                | api,auth:api |
|        | GET|HEAD  | home                    | home             | App\Http\Controllers\HomeController@index                              | web,auth     |
|        | GET|HEAD  | login                   | login            | App\Http\Controllers\Auth\LoginController@showLoginForm                | web,guest    |
|        | POST      | login                   |                  | App\Http\Controllers\Auth\LoginController@login                        | web,guest    |
|        | POST      | logout                  | logout           | App\Http\Controllers\Auth\LoginController@logout                       | web          |
|        | POST      | password/email          | password.email   | App\Http\Controllers\Auth\ForgotPasswordController@sendResetLinkEmail  | web,guest    |
|        | POST      | password/reset          |                  | App\Http\Controllers\Auth\ResetPasswordController@reset                | web,guest    |
|        | GET|HEAD  | password/reset          | password.request | App\Http\Controllers\Auth\ForgotPasswordController@showLinkRequestForm | web,guest    |
|        | GET|HEAD  | password/reset/{token}  | password.reset   | App\Http\Controllers\Auth\ResetPasswordController@showResetForm        | web,guest    |
|        | POST      | register                |                  | App\Http\Controllers\Auth\RegisterController@register                  | web,guest    |
|        | GET|HEAD  | register                | register         | App\Http\Controllers\Auth\RegisterController@showRegistrationForm      | web,guest    |
+--------+-----------+-------------------------+------------------+------------------------------------------------------------------------+--------------+

我在 web.php 中定义了它,它位于资源(用户)之上,因此应该优先于“用户”资源中的任何其他路由。 我错过了什么?

//编辑

查看代码:

                                            <li class="m-nav__item">
                                                <a href="{{route('users.multidel')}}" data-method="delete" class="m-nav__link" id="multi-delete">
                                                    <i class="m-nav__link-icon la la-trash-o"></i>
                                                    <span class="m-nav__link-text">
                                                        Multi-Delete
                                                    </span>
                                                </a>
                                            </li>

以及驱动它的 js:

        $("#multi-delete").on("click", function(e) {
            e.preventDefault();
            var $this = $(this);

            var selected_ids = [];
            var selected_hids = "";
            $("tbody .m-checkable:checked").each(function() {
                selected_ids.push($(this).val());
                selected_hids += $("#data-row-"+$(this).val()).find("a.jquery-postback").data('hid')+"<br>";
            });

            swal({
                title: "Are you sure?",html: "Are you sure you want to delete <strong>multiple records</strong>?<br>The following will be deleted:<br>"+selected_hids+"<br>You won't be able to revert this action once taken!",type: "warning",showCancelButton: true,confirmButtonText: "Yes, delete all records!"
            }).then(function(ev) {
                if (ev.value) {
                    $.ajaxSetup({headers: {'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')}});

                    $.post({
                        type: $this.data('method'),
                        url: $this.attr('href'),
                        data: selected_ids,
                    }).done(function (result) {
                        console.log($result);
                        if (result.status == 1) {
                            bootstrapNotify('success', 'Deleted Successfully', 'Your records "' + $this.data('hid') + '" was deleted successfully.');
                            $('#records-table').DataTable().row("#data-row-" + result.id).remove().draw();
                        }
                        else {
                            bootstrapNotify('danger', 'Delete Failed', 'Your record "' + $this.data('hid') + '" was <strong>not</strong> deleted successfully.');
                        }
                    });
                }
            })
        });

控制器代码:

public function multiDel($request)
{
    $users = User::findOrFail($request->selected_hids);

    $result = 1;
/*
    foreach ($users as $user){
        if (!$user->delete() && $result == 1)
            $result = 0;
    }
*/
    foreach ($users as $user){
        $result += $user->email;
    }
    return response()->json($result);
}

【问题讨论】:

  • 其他管理员/用户资源端点是否按预期工作?
  • 是的,它们确实有效...
  • admin/users/multidel 是一个DELETE 方法,只有在您传递带有_method 输入且值为delete 的表单请求时才能访问。或者将路由从Route::delete()更改为Route::get()。
  • 我将方法作为 delete: "type: $this.data('method')," - 与我的单个实体销毁方法一起工作。根据我上面的 console.log 详细信息,DELETE 前缀表示正在使用正确的方法。

标签: laravel laravel-5


【解决方案1】:

在资源之后添加..

Route::group(['middleware'=>'admin'], function(){
    Route::get('/admin', 'AdminController@index')->name('admin.home');;

    Route::resource('admin/users', 'AdminUsersController');
    Route::delete('admin/users/multidel', 'AdminUsersController@multiDel')->name('users.multidel');
});

【讨论】:

    【解决方案2】:

    我将删除路由放回资源路由上方,显然在此过程中更改了其他内容,因为现在它不再是 404 错误,而是 500 错误。

    "message": "Too few arguments to function App\\Http\\Controllers\\AdminUsersController::multiDel(), 0 passed and exactly 1 expected",
    

    这是一个完全不同的问题,所以我认为原始查询已解决。 我想我改变的是函数定义:

    public function multiDel($request)
    

    在某个阶段是 ...multiDel(Request $request) - 我把它放回到那个阶段,然后看到 404 又回来了。进一步调查显示:

    message": "No query results for model [App\\User].",
    

    这表明 $request 数据有问题。奇怪的是它在页面加载时抛出 404 但上面有错误。 希望这对将来的某人有所帮助...

    【讨论】:

      猜你喜欢
      • 2019-03-31
      • 2018-09-26
      • 1970-01-01
      • 2017-11-15
      • 1970-01-01
      • 2018-12-18
      • 2019-07-10
      • 2014-06-22
      • 2016-01-09
      相关资源
      最近更新 更多