2016-05-11 15 views
4

投稿ボタンを押すと、ページを更新するだけで何も起こりません。Laravel 5.2フォームの検証リクエストが正しく機能しない

ここに私のコードです:

アプリ/ HTTP/routes.phpの

Route::group(['middleware' => ['web']], function() { 
    Route::get('profile/edit', '[email protected]'); 
    Route::post('update_name', '[email protected]'); 
}); 

アプリ/ HTTP /リクエスト/ UpdateNameRequest.php

<?php 

namespace App\Http\Requests; 

use App\Http\Requests\Request; 
use Illuminate\Support\Facades\Auth; 

class UpdateNameRequest extends Request 
{ 
    /** 
    * Determine if the user is authorized to make this request. 
    * 
    * @return bool 
    */ 
    public function authorize() 
    { 
     return Auth::check(); 
    } 

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

アプリ/ HTTPは/Controllers/UserController.php

<?php 

namespace App\Http\Controllers; 

use Illuminate\Http\Request; 
use Illuminate\Support\Facades\Auth; 
use App\Http\Requests; 
use App\User; 

class UserController extends Controller 
{ 
    public function __construct() { 
     $this->middleware('auth'); 
    } 

    public function editProfile() { 
     if (Auth::user()->role_id === 3) { 
      return view('profile.crew.edit');   
     } 
    } 

    public function updateName(Requests\UpdateNameRequest $request) { 
     return dd($request->all()); 
    } 
} 

、ここでは、HTMLフォームの参照HERESにフォーム出力用

{!! Form::open(array('url' => 'update_name')) !!} 
<div class="form-group{{ $errors->has('first_name') ? ' has-error' : '' }}"> 
    <label class="control-label">First Name</label> 
    <input type="text" class="form-control" name="first_name" value="{{ old('first_name') }}" placeholder="{{ Auth::user()->first_name }}"> 

    @if ($errors->has('first_name')) 
     <span class="help-block"> 
      <strong>{{ $errors->first('first_name') }}</strong> 
     </span> 
    @endif 
</div> 
<div class="form-group{{ $errors->has('last_name') ? ' has-error' : '' }}"> 
    <label class="control-label">Last Name</label> 
    <input type="text" class="form-control" name="last_name" value="{{ old('last_name') }}" placeholder="{{ Auth::user()->last_name }}"> 

    @if ($errors->has('last_name')) 
     <span class="help-block"> 
      <strong>{{ $errors->first('last_name') }}</strong> 
     </span> 
    @endif 
</div> 
<button type="submit" class="btn btn-success">Update name</button> 
{!! Form::close() !!} 

<form method="POST" action="http://localhost:8000/update_name" accept-charset="UTF-8"> 
    <input name="_token" type="hidden" value="VViupfPaPCQCk5aeUdc27Pt2Z8J7Hx1Y2khC0IY9"> 
    <div class="form-group"> 
     <label class="control-label">First Name</label> 
     <input type="text" class="form-control" name="first_name" value="" placeholder="Hans"> 

    </div> 
    <div class="form-group"> 
     <label class="control-label">Last Name</label> 
     <input type="text" class="form-control" name="last_name" value="" placeholder="Padberg"> 

    </div> 
    <button type="submit" class="btn btn-success">Update name</button> 
</form> 

ここではPHPの職人ルートでの私の出力です:リストは

+--------+----------+-------------------------+------+-----------------------------------------------------------------+--------------+ 
| Domain | Method | URI      | Name | Action               | Middleware | 
+--------+----------+-------------------------+------+-----------------------------------------------------------------+--------------+ 
|  | GET|HEAD |/      |  | Closure               | web   | 
|  | GET|HEAD | home     |  | App\Http\Controllers\[email protected]      | web,web,auth | 
|  | GET|HEAD | login     |  | App\Http\Controllers\Auth\[email protected]   | web,guest | 
|  | POST  | login     |  | App\Http\Controllers\Auth\[email protected]     | web,guest | 
|  | GET|HEAD | logout     |  | App\Http\Controllers\Auth\[email protected]     | web   | 
|  | POST  | password/email   |  | App\Http\Controllers\Auth\[email protected] | web,guest | 
|  | POST  | password/reset   |  | App\Http\Controllers\Auth\[email protected]    | web,guest | 
|  | GET|HEAD | password/reset/{token?} |  | App\Http\Controllers\Auth\[email protected]  | web,guest | 
|  | GET|HEAD | profile     |  | App\Http\Controllers\[email protected]     | web,web,auth | 
|  | GET|HEAD | profile/edit   |  | App\Http\Controllers\[email protected]     | web,web,auth | 
|  | GET|HEAD | register    |  | App\Http\Controllers\Auth\[email protected] | web,guest | 
|  | POST  | register    |  | App\Http\Controllers\Auth\[email protected]    | web,guest | 
|  | POST  | update_email   |  | App\Http\Controllers\[email protected]     | web,web,auth | 
|  | POST  | update_name    |  | App\Http\Controllers\[email protected]     | web,web,auth | 
|  | POST  | update_password   |  | App\Http\Controllers\[email protected]    | web,web,auth | 
|  | POST  | update_profile_picture |  | App\Http\Controllers\[email protected]  | web,web,auth | 
+--------+----------+-------------------------+------+-----------------------------------------------------------------+--------------+ 
+0

あなたは必ずこのことを持っていますパスは正しいですか?私はそれが "UpdateNameRequest"であるべきだと思う –

+0

はい私はそれが正しいパスだと確信している – emurmotol

+0

私はあなたが私に言ったようにそれを実行しようとしたと私にこのエラーを与えた 'クラスのアプリケーション(update \ requestNameRequest $要求)\ Http \ Controllers \ UpdateNameRequestは存在しません。 ' – emurmotol

答えて

3

あなたエラー変数が空の値を返している書き込み可能であることを確認してください。そのページが更新されているように見えるエラーは表示されません。 Ur検証は機能していますが、エラー値は表示されません。

お試しください: app \ Http \ Kernelにあります。

Route::group(['middleware' => ['web']], function() { 
    Route::get('profile/edit', '[email protected]'); 
    Route::post('update_name', '[email protected]'); 
}); 

::私はこれを変更し、問題を解決し$middleware

+0

ありがとうございました。私は 'routes.php'ファイルの'ミドルウェア 'を' web'から 'auth'に変更しました。 – emurmotol

0

フォームビルダをインストールしましたか? Laravel Collectiveは、HTML &フォームファサードのインストール方法に関するガイドを作成しました。あなたはここでそれを見つけることができます:https://laravelcollective.com/docs/5.2/html

+0

はい私はしました。私がブラウザからソースを見ると、フォームはきれいに見える – emurmotol

+0

親切に私はフォームの出力を追加しました – emurmotol

0

ないことがあり、正確にわからしかし、ここでは試して物事のカップルです:

明示的method => post

{!! Form::open(array('url' => 'update_name', 'method' => 'post')) !!} 

ルートがあることを確認するために路線を確認を追加します正しく登録されています。実行:

`php artisan route:list` 

その他すべてが失敗した場合は、Postmanを使用して手動でPOSTリクエストを送信してください。これにより、問題があなたのフォームにあるのかPOSTルートを設定するのかを少なくとも特定することができます。

最後に、この問題に関係なく、私はそれを簡単に保つことをお勧めします。このようなルートでは、Requestクラスを持つ必要はなく、インライン検証だけを使用します。あなたはTokenMismatchExceptionを取得している

public function updateName(Illuminate\Http\Request $request) { 
    $this->validate($request, [ 
     'first_name' => 'required', 
     'last_name' => 'required' 
    ]); 
    return dd($request->all()); 
} 
+0

私は 'http:// localhost:8000/update_name'をpostmanで実行しようとしました。このエラーは、何かが間違っているように見える。 TokenMismatchException' – emurmotol

+0

これを実行しても何も起こらない 'public function updateName(Illuminate \ Http \ Request $ request){ $ this-> validate($ request、[first_name '=>'必須、 'last_name' = > '必須' ]); return dd($ request-> all()); } ' – emurmotol

+0

しかし、私はこの' public function updateName(Illuminate \ Http \ Request $ request){ return dd($ request-> all())を実行します。 } 'それはうまく動作します – emurmotol

0

は...あなたのセッションストレージ・パスが

0

からweb$middlewareGroupsからPHPの移行\Illuminate\Session\Middleware\StartSession::class

Route::group(['middleware' => ['auth']], function() { 
    Route::get('profile/edit', '[email protected]'); 
    Route::post('update_name', '[email protected]'); 
}); 

は君たちをありがとう:)

関連する問題