0

いくつかの検証を通過するLaravelフォームがあります。明らかに、検証が失敗した場合は、ユーザーをフォームにリダイレクトして、間違いを警告してもらいたいと思います。また、フォームがかなり大きいので、ユーザーがデータを再入力する必要はありません。これがフォームです(このメッセージのサイズを小さくするために大部分を切り取っています)

:@layout('templates.main')

@section('content')
    @if(Session::has('validation_errors'))
    <ul class="form_errors">
        @foreach($errors as $error)
            {{$error}}
        @endforeach
    </ul>
    @endif

    {{ Form::open('account/create', 'POST') }}
    <table>
        <tr>
            <td>{{ Form::label('dealer', 'Dealer') }}</td>
            <td>{{ Form::select('dealer', array('1' => 'Dealer #1', '2' => 'Dealer #2')) }}</td>
            <td>{{ Form::label('amount', 'Amount') }}</td>
            <td>{{ Form::text('amount', Input::old('amount')) }}</td><!--Here is where I'm testing for old input-->
        </tr>
        <tr>
            <td>{{ Form::label('date', 'Date') }}</td>
            <td>{{ Form::date('date', NULL, array('class' => 'date_picker')) }}</td>
            <td>{{ Form::label('installation', 'Installation #') }}</td>
            <td>{{ Form::input('text', 'installation') }}</td>
        </tr>
        <tr>
            <td colspan="4">{{ Form::textarea('notebox', NULL, array('id' => 'notebox')) }}</td>
        </tr>
        <tr>
            <td colspan="4">{{ Form::submit('Submit') }}&nbsp;{{ Form::reset('Reset') }}</td>
        </tr>
    </table>
    {{ Form::close() }}
@endsection

フォームが送信されると、フォームを処理するコントローラーは次のようになります。

public function post_create() {
        //Validate it in the model
        $validation = Account::validate(Input::all());
        if($validation->fails()){
            return Redirect::to('account/create')
                ->with_input()
                ->with('validation_errors', true)
                ->with('errors', $validation->errors->all('<li>:message</li>'));
        }
        else {
            return "passed";//for debugging purposes
        }
    }

そして最後に、アカウントモデルは次のとおりです。

class Account extends Eloquent { 
        public static function validate($input) {
            //Validation rules
            $rules = array(
                'firstname' => 'required',
                'lastname' => 'required',
                            //etc...
            );
            //Custom validation messages
            $messages = array(
                'firstname_required' => 'A first name is required.',
                'lastname_required' => 'A last name is required.',
                //etc...
            );
            //Pass it through the validator and spit it out
            return Validator::make($input, $rules, $messages);
        }
    }

したがって、フォームを意図的に無効にしてこれをテストすると、アカウント/作成フォームにリダイレクトされますが、検証エラーは表示されず、古い入力は保存されません(Input::old()金額テキストボックスにのみ添付されます)。

4

1 に答える 1

3

の文字の総数Input::old()が約1400文字を超えると、少しバグが発生することがわかります。'driver' => 'cookie'でからに変更することでこれを解決し'driver' => 'file'application/config/session.php期待どおりに機能し始めました。

https://github.com/laravel/laravel/issues/1475

于 2013-01-28T20:36:43.707 に答える