2016-10-29 5 views
1

私はLaravelで最初のフォームを作成しており、フォームの生成はすべて動作しています。ストア機能が、フォーム検証の結果とは無関係に、私の連絡先ページに盲目的にユーザーを返すように見えるだけです。Laravelフォームの検証が機能していないようです。

投稿された電子メールアドレスが電子メールではなくランダムな文字列である場合、私は/ contactページに戻ってきて、感謝メッセージがビューに送信されます。

私のコントローラは、次のようになります。

namespace App\Http\Controllers; 

use Illuminate\Support\ServiceProvider; 
use Illuminate\Support\Facades\View; 
use Illuminate\Support\Facades\DB; 

use App\Http\Requests\ContactFormRequest; 

class ContactController extends Controller { 

    public function create(){ 
     return view('contact'); 
    } 

    public function store(ContactFormRequest $request) { 

     return \Redirect::route('contact') 
     ->with('message', 'Thanks for contacting us!'); 

    } 
} 

そして、このようなフォームハンドラ:

namespace App\Http\Requests; 
use Illuminate\Http\Request; 

class ContactFormRequest extends Request { 
    public function authorize() { 
    return true; // don't need to be registered to run form so true 
    } 
    public function rules() { 
    return [ 
     'email' => 'required|email', 
    ]; 
    } 
} 

これは、次のルート

if (config('app.tan_site_page_contact')===true){ 
    Route::get('/contact', ['as' => 'contact', 'uses' => '[email protected]']); 
    Route::post('/contact', ['as' => 'contact_store', 'uses' => '[email protected]']); 
}); 

そして、このような形で制御されます:

<ul> 
    @foreach($errors->all() as $error) 
     <li>{{ $error }}</li> 
    @endforeach 
    </ul> 
    @if(Session::has('message')) 
     <div class="alert alert-info"> 
     {{Session::get('message')}} 
     </div> 
    @endif 


{!! Form::open(array('route' => 'contact_store', 'id' => 'contactCallMeForm')) !!}   
{!! Form::label('Your E-mail Address') !!} 
{!! Form::text('email', null, array('required', 'class'=>'form-control', 'placeholder'=>'Your e-mail address')) !!} 
{!! Form::submit('Contact Us!', array('class'=>'btn btn-primary')) !!} 
{!! Form::close() !!} 

フォームのHTMLは、ここでの問題は、あなたのContactFormRequestクラスです

<form method="POST" action="http://localhost/contact" accept-charset="UTF-8" id="contactCallMeForm" novalidate=""> 
    <input name="_token" type="hidden" value="VNHchLZhfsXadVZXCZWHGdAuJ4zgmO6cDJIGhR59"> 
    <label for="Your E-mail Address">Your E-mail Address</label> 
    <input required="required" class="form-control" placeholder="Your e-mail address" name="email" type="text"> 
    <input class="btn btn-primary" type="submit" value="Contact Us!"> 
</form> 
+0

生成されたフォームのHTMLを表示し、ルートも追加します。 – Kyslik

+0

'contact'と' contact_store'ルートの宣言を追加してください。 – salamza

+0

更新@Kyslik – AdamJones

答えて

1

トークンと有効なURLで、罰金です。

無効なRequestクラスから拡張します。 \Illuminate\Http\Requestクラスから拡張しますが、\Illuminate\Foundation\Http\FormRequest(または\App\Http\Requests\Requestクラス)から拡張する必要があります

+0

これをこれらのクラスのいずれかに変更すると、クラス 'App \ Http \ Requests \ Request'が見つかりませんでした。それらを設定するためにapp.phpに何かを追加する必要がありますか? – AdamJones

+0

@AdamJonesこのクラスをお持ちでない場合は、 '\ Illuminate \ Foundation \ Http \ FormRequest'クラスから拡張するか、https://github.com/laravel/laravel/blob/5.2/と同じものを作成することができますapp/Http/Requests/Request.php –

+0

@MarcinNabiałekありがとうございました!そのリンクはトリックをした、私は "FormRequest"ではなく、 "要求"を拡張していた! – AdamJones

関連する問題