Laravel 5.3抛出FormRequest错误

3
我在 Laravel 5.3 中创建了一个“request”类,代码如下:
<?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 继承自 FormRequest(使用 Illuminate\Foundation\Http\FormRequest;)
而在 Laravel 5.2 中 UserStoreRequest 继承自 Request(使用 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);
    }

请展示您的 routes/api.phpUserControllerstore 方法。 - alepeino
@Alejandro,请查看我的最后一次编辑! - Jamie
有什么想法吗? - Jamie
1个回答

3
这是因为FormRequest::response函数想要重定向到一个带有错误信息的页面,但由于你没有任何网页路由(只有api路由),所以它将失败并抛出NotFoundHttpException异常。如果你有任何网页路由,它会在内部将你重定向到根目录。
如果你查看那个FormRequest::response函数内部的代码,你会发现这段:
if($this->expectsJson()) {
    return new JsonResponse($errors, 422);
}

如果您能够满足expectsJson的期望,则可以按预期工作。
您可以通过以下几种方式实现:
- 通过提供X-Requested-With头来确保请求是XMLHttpRequest。 - 提供X-PJAX头。 - 提供带有application/jsonAccept头。 - 覆盖请求中的wantsJson调用,使其始终返回true。代码如下: class JsonRequest extends Request { public function wantsJson() { return true; } }

终于有一个可行的答案了!谢谢。在你给出的例子中,我猜 extends Request 应该改为 extends FormRequest(在 Laravel 5.3 中更改)。非常奇怪,我在文档中没有找到这个。 - Jamie

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接