Laravel 5.3引发错误formrequest

问题描述:

我在Laravel 5.3中做了request类。看起来是这样的:Laravel 5.3引发错误formrequest

<?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 [ 

    ]; 
} 

它突然作品!?!?

--UPDATE--

它看起来像验证看起来我web.php,但我没有一个路线有(这就是为什么我收到异常:NotFoundHttpException in RouteCollection.php line 161:)。我在5.2没有这个问题。我该怎么办?

--UPDATE--

我目前的路线:

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

此外,如果此尝试用新鲜Laravel 5.3安装我收到错误!

也许有事情做与:

Laravel 5.3UserStoreRequest

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

而且在Laravel 5.2UserStoreRequest

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\[email protected]'); 
Route::get('/register/{user}/verify/{ConformationCode}', 'Auth\[email protected]'); 
Route::put('/test', 'User\[email protected]'); 

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); 
    } 
+0

请出示你的'路线/ api.php'和''UserController'方法store' – alepeino

+0

@Alejandro请参阅我的最后的编辑! – Jamie

+0

任何想法可能是什么? – Jamie

这是因为FormRequest::response功能,希望您重定向到一个页面与错误。但是因为你没有任何网络路由(只有api路由),所以它会失败,出现NotFoundHttpException。如果您有任何Web路由,它会(在内部)将您重定向到根目录。

如果你看看那个FormRequest::response函数中,你可以看到这一点:

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

所以,如果你能在expectsJson fullfill的expections,它按预期工作。

可以在一对夫妇的方式做到这一点:

  • 确保请求是通过提供X-Requested-With标头的XMLHttpRequest。
  • 供应X-PJAX
  • 供应Accept头与application/json
  • 覆盖上的要求wantsJson调用总是返回true。像这样:

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

+0

最后一个有效的答案!谢谢。在你给出的例子中,我猜'扩展Request'''应该是'''extends FormRequest'''(在Laravel 5.3中进行了更改)。很奇怪,我没有在文档中找到它。 – Jamie