2015-12-23 334 views
5

現在我很混亂,我從Laracast學習Laravel,根據老師的說法,在驗證失敗後,表單不會重置用戶輸入的值。但是當測試驗證時,當我提交表單重置每一件事。驗證失敗後,Laravel在輸入中重置輸入值?

另一個問題是當我嘗試訪問它時未定義變量$errors

我的控制器

<?php 

namespace App\Http\Controllers; 


use App\Articles; 
use App\Http\Requests\CreateArticle; 
use Carbon\Carbon; 
use App\Http\Requests; 
use Illuminate\Http\Request; 
use App\Http\Controllers\Controller; 

class ArticlesController extends Controller 
{ 



    public function create() 
    { 
     return view('articles.create'); 
    } 


    public function store(Request $request) 
    { 
     $this->validate($request, [ 
      'title' => 'required', 
      'body' => 'required' 
     ]); 
     Articles::create($request->all()); 
     return redirect('articles'); 
    } 

} 

我查看

@extends('app') 

@section('content') 
    <h1>Create a new Articles</h1> 

    <hr/> 

    {!! Form::open(['url' => 'articles']) !!} 

    <div class="form-group"> 
     {!! Form::label('title', 'Title: ') !!} 
     {!! Form::text('title', null, ['class' => 'form-control']) !!} 
    </div> 


    <div class="form-group"> 
     {!! Form::label('body', 'Body') !!} 
     {!! Form::textarea('body', null, ['class' => 'form-control']) !!} 
    </div> 


    <div class="form-group"> 
     {!! Form::label('published_at', 'Published On:') !!} 
     {!! Form::input('text', 'published_at', date('Y-m-d'), ['class' => 'form-control']) !!} 
    </div> 


    <div class="form-group"> 
     {!! Form::submit('submit', ['class' => 'btn btn-primary']) !!} 
    </div> 


    @if(isset($errors)) 
    {{var_dump($errors)}} 
    @endif 
    {!! Form::close() !!} 

@stop 

他使用V5.0和我使用V5.2

+0

你能告訴我們你的驗證功能嗎? – James

回答

3

收益從您的控制器以下。 ..

return redirect('articles')->withInput(); 

看看是否有幫助。你可以排除某些領域,如果你想這樣做..

return redirect('articles')->withInput($request->only('email')) 
+0

添加' - > withInput()'方法後不起作用 –

4

這裏有幾個問題。

第一個,驗證失敗後未保存輸入。我相信這是因爲你正在傳遞null到構建輸入的函數中,當你應該傳遞你希望它默認的值時。請嘗試以下操作...

<div class="form-group"> 
    {!! Form::label('title', 'Title: ') !!} 
    {!! Form::text('title', old('title'), ['class' => 'form-control']) !!} 
</div> 

然後,這應該使用之前輸入的舊數據填充輸入元素。只需按照相同的步驟處理其餘的表單輸入。

未設定值$errors的第二個問題實際上是由於Laravel 5.2的更改所致。很多人一直有完全相同的問題,所以我只是想請您看看前面的回答:Laravel 5.2 $errors not appearing in Blade

+0

我將再次使用5.0進行測試,我再次觀看了視頻,他沒有填充函數'old('title')',只是'null'。感謝您的回答 –

+1

在這種情況下,他可能會使用'Form :: model()',我相信這實際上會填充這些值。 – user3158900

+0

問題可能是由於新的LaravelCollective Html取代了Illuminate Html –

4

如果你沒有使用

<div class="form-group"> 
{!! Form::label('title', 'Title: ') !!} 
{!! Form::text('title', old('title'), ['class' => 'form-control']) !!} 
</div> 

而且具有簡單的輸入字段,如

<input id="Email" name="Email" type="email" class="uit-input" placeholder="your email address" value={{old('Email')}}> 

用舊數據'預填充'該值。