Laravel 5.3 抛出错误表单请求

Laravel 5.3 throws error formrequest

我在 Laravel 5.3 中制作了 request class。看起来像这样:

<?php

namespace App\Http\Requests\User;

use Illuminate\Foundation\Http\FormRequest;

class StoreRequest extends FormRequest
{
    /**
     * Determine if the user is authorized to make this request.
     *
     * @return bool
     */
    public function authorize()
    {
        return true;
    }

    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules()
    {
        return [
            'name'              => 'required|max:25|min:2'
        ];
    }
}

但是当我在我的控制器中使用它时,我收到:

NotFoundHttpException in RouteCollection.php line 161:

当我删除规则时,它看起来像这样:

public function rules()
{
   return [

   ];
}

突然好用了!?!?

--更新--

看起来验证器在我的 web.php 中查找,但我在那里没有路由(这就是我收到异常的原因:NotFoundHttpException in RouteCollection.php line 161:)。我在 5.2 中没有遇到这个问题。我应该怎么办?

--更新--

我目前的路线:

| Domain | Method    | URI                                           | Name         | Action                                            | Middleware |
+--------+-----------+-----------------------------------------------+--------------+---------------------------------------------------+------------+
|        | POST      | api/login                                     |              | App\Http\Controllers\Auth\AuthController@login    | api        |
|        | GET|HEAD  | api/register/{user}/verify/{ConformationCode} |              | App\Http\Controllers\Auth\AdminController@confirm | api        |
|        | GET|HEAD  | api/user                                      | user.index   | App\Http\Controllers\User\UserController@index    | api,active |
|        | POST      | api/user                                      | user.store   | App\Http\Controllers\User\UserController@store    | api,active |
|        | GET|HEAD  | api/user/create                               | user.create  | App\Http\Controllers\User\UserController@create   | api,active |
|        | GET|HEAD  | api/user/{user}                               | user.show    | App\Http\Controllers\User\UserController@show     | api,active |
|        | PUT|PATCH | api/user/{user}                               | user.update  | App\Http\Controllers\User\UserController@update   | api,active |
|        | DELETE    | api/user/{user}                               | user.destroy | App\Http\Controllers\User\UserController@destroy  | api,active |
|        | GET|HEAD  | api/user/{user}/edit                          | user.edit    | App\Http\Controllers\User\UserController@edit     | api,active 

此外,如果尝试使用全新 Laravel 5.3 安装,我会收到错误消息!

可能跟以下有关:

Laravel 5.3 UserStoreRequest

extends FormRequest (use Illuminate\Foundation\Http\FormRequest;)

并在 Laravel 5.2 UserStoreRequest

extends Request (use App\Http\Requests\Request;)

--编辑--

API.PHP

<?php

/*
|--------------------------------------------------------------------------
| API Routes
|--------------------------------------------------------------------------
|
| Here is where you can register API routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| is assigned the "api" middleware group. Enjoy building your API!
|
*/


Route::post('/login', 'Auth\AuthController@login');
Route::get('/register/{user}/verify/{ConformationCode}', 'Auth\AdminController@confirm');
Route::put('/test', 'User\UserController@test');

Route::group(['middleware' => ['active']], function () {
    Route::resource('user',         'User\UserController');
    Route::resource('corporation',  'Corporation\CorporationController');
    Route::resource('forum',        'Forum\ForumController');
    Route::resource('topic',        'Topic\TopicController');
});

存储方式

 public function store(StoreRequest $request)
    {
        if($this->authorize($this->user))
        {
            $user = $this->userInfo->store($request);
            event(new UserRegistered($user));

            return response()->json(['success' => 'gebruiker succesvol aangemaakt. Welkom email verzonden.']);
        }

        return response()->json(['error' => 'niet geautoriseerd'], 401);
    }

发生这种情况是因为 FormRequest::response 函数想要将您重定向到有错误的页面。但是因为你没有任何网络路由(只有 api 路由),它会失败并显示 NotFoundHttpException。如果您有任何网络路由,它会(在内部)将您重定向到根目录。

如果你查看那个 FormRequest::response 函数的内部,你可以看到这个位:

if($this->expectsJson()) {
    return new JsonResponse($errors, 422);
}

因此,如果您能满足 expectsJson 中的期望,它就会按预期工作。

您可以通过几种方式做到这一点:

  • 通过提供 X-Requested-Withheader.
  • 确保请求是 XMLHttpRequest
  • 提供一个X-PJAXheader
  • 提供 Accept header 和 application/json
  • 将对请求的 wantsJson 调用覆盖为始终 return true。像这样:

class JsonRequest extends Request { public function wantsJson() { return true; } }