2016-09-28 82 views
3

我在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

回答

3

這是因爲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