为什么我的创建表单请求在Laravel5中抛出404异常?

Roh*_*han 8 php laravel laravel-5 laravel-5.1

所以我正在使用Laravel 5安装,就像一个优秀的程序员一样,我正在尝试使用Laravel中的新表单请求功能从我的控制器中获取验证逻辑.

所以我继续创建一个名为CreateTenantRequest的表单请求,如下所示:

php artisan make:request CreateTenantRequest
Run Code Online (Sandbox Code Playgroud)

默认情况下,它falseauthorize方法中返回一个并且它可以正常工作.如果我发出请求,它会被禁止.但后来我更新了规则并将authorize方法设置为true现在,当我从Postman发出相同的请求时,它说:

NotFoundHttpException in RouteCollection.php line 161:
Run Code Online (Sandbox Code Playgroud)

这是荒谬的,因为当我把它改为假时,它会返回禁止的罚款?

我错过了什么或做错了什么?

虽然这无关紧要,但我的规则数组如下:

return [
    // Tenant details
    'name' => 'required|max:255',
    'username' => 'required|max:255|unique:tenant',
    // Tenant Admin details
    'first_name' => 'required',
    'last_name' => 'required',
    'email' => 'required|email|max:255',
    'password' => 'required|confirmed|min:6',
];
Run Code Online (Sandbox Code Playgroud)

路线文件:

<?php

Route::group(['prefix' => 'api'], function(){
    Route::post('authenticate', 'Auth\AuthController@authenticate');

    // SuperAdmin Group
    Route::group(['namespace' => 'Archive', 'middleware' => 'superadmin'], function(){
        Route::resource('tenants', 'TenantController');
        Route::get('tenants/{id}/users', 'TenantController@showUsersForTenant');
    });

    // Tenant Group
    Route::group(['namespace' => 'Tenant'], function(){
        Route::resource('roles', 'RoleController');
        Route::resource('users', 'UserController');
    });

    // Remove before production
    // Only for testing purposes
    Route::get('test', function(){
        // return JWTAuth::parseToken()->getPayload()->get('username');
    });
});
Run Code Online (Sandbox Code Playgroud)

Roh*_*han 9

所以在与shock_gone_wild进行了一次竞价讨论后,我意识到请求不是ajax,因此laravel正在重新路由到会话中出错的URL.

我正在使用Postman REST客户端测试API,默认情况下它会发送基本的HTTP请求,但是当添加标头时,如下所示:

X-Requested-With:XMLHttpRequest
Run Code Online (Sandbox Code Playgroud)

它使请求Ajax然后进行laravel检查以查看它是否确实是ajax,因此它不是路由到url,而是在JSON中返回验证错误.

因此,任何时候如果有人创建一个解耦的Web服务并尝试使用Postman进行测试,请使用标头进行测试,以便您可以在应用程序中模拟实际的ajax请求.

  • 或者可以使用 ```Accept: application/json``` (4认同)