Laravel 4在验证失败后将输入重定向回页面

时间:2014-02-11 09:44:05

标签: javascript validation laravel

我有4个字段将由用户动态创建。

<div class="controls" id="exchange-fields">
           <p>
            <div id='exchange_div'>
            <div class="input-append" id='currency_div1'>
            {{ Form::select('currency_id[]', $currencies, null, array('name'=>'currency_id', 'id'=>'currency_id', 'value'=>'Input::old("currency_id")[0]' )) }} 
            </div>

            &nbsp;&nbsp;&nbsp;&nbsp;
            <div class="input-prepend" id='actual_div1'>
            <span class="add-on">Actual</span>
            {{ Form::text('exchange_rate[]', null, array('class'=>'input-medium rate', 'maxlength'=>10, 'id'=>'exchange_rate', 'value'=>'Input::old("exchange_rate")[0]' )) }}
            </div>

            &nbsp;&nbsp;&nbsp;&nbsp;
            <div class="input-append" id='markup_div1'>
            {{ Form::text('exchange_rate_markup[]', null, array('class'=>'input-mini yellow rate', 'maxlength'=>4, 'id'=>'exchange_rate_markup', 'value'=>'Input::old("exchange_rate_markup")[0]' )) }}<span class="add-on">%</span> 
            </div>

            &nbsp;&nbsp;&nbsp;&nbsp;
            <div class="input-prepend" id='rate_div1'>
            <span class="add-on">Marked-up</span>
            {{ Form::text('after_markup_rate[]', null, array('class'=>'input-medium yellow', 'maxlength'=>10, 'id'=>'after_markup_rate', 'value'=>'Input::old("after_markup_rate")[0]' )) }}
            </div>


        </div>
        </div>
            &nbsp;&nbsp;&nbsp;&nbsp;
            <div class="controls">
                 <input class="btn btn-primary" type="button" id="addScnt" value="Add">

            </div>

我使用javascript动态填充这些字段。

var scntDiv = $('#exchange-fields');
    var i = $('#exchange-fields p').size() + 1;


    $('#addScnt').click(function() {        

     $(scntDiv).append('<p>');   
     $("#exchange_div").clone().attr("id",'exchange_div_'+ i).appendTo(scntDiv); 

//Append the remove button
    $($('#exchange_div_'+ i)).append('<input class="btn btn-primary" name="remove" type="button" id="remScnt" value="Remove">');
    i++;

    });

这是完美的工作,直到我将这些值发送到我的控制器并且验证失败。 如何使用在视图文件中动态填充的旧输入重新填充这些字段?

我使用return Redirect :: back() - &gt; withInput() - &gt; withErrors($ e-&gt; getErrors());验证无法重新填充这些字段后重定向。但是因为这4个字段只接受字符串值而返回的输入是在数组中所以我无法在验证失败后重新填充这4个字段。

有什么好方法可以解决这个问题吗?

提前致谢。

4 个答案:

答案 0 :(得分:3)

@ a7omiton而不是返回所有输入。我使用Input :: except(array)来返回不是数组的其余字段。

重定向时我使用附加的with()来返回字段数组,就像最初加载页面时渲染视图一样。

// If validation fails, ignore those exchange rate fields 
//because they are in array not string
$input = Input::except([
    'currency_id', 
    'exchange_rate', 
    'exchange_rate_markup', 
    'after_markup_rate'
]);
// return normally as separate array and it will store in session
return Redirect::back()
    ->withInput($input)
    ->withErrors($e->getErrors())
    ->with('exchange_rate', Input::get('exchange_rate'))
    ->with('currency_id', Input::get('currency_id'))
    ->with('exchange_rate_markup', Input::get('exchange_rate_markup'))
    ->with('after_markup_rate', Input::get('after_markup_rate'));

答案 1 :(得分:0)

不要在HTML中设置输入字段的值。当验证失败时,Laravel会自动执行此操作。

Form::text中的第二个参数是值。将此设置为null将允许Laravel自动填充它。

答案 2 :(得分:0)

laravel将自动填充表单字段。 只需将第二个参数放在Input :: old('column_name')中。

{{ Form::text('name', Input::old('name'), array('class' => 'span4','placeholder' => 'name')) }}

答案 3 :(得分:0)

虽然这是一个老帖子,但这将有助于一些人在这里寻找解决方案。

通过在laravel视图中添加此代码,您可以在重定向后获取视图中的所有输入变量,

print_r(app('request')->old());

您可以将此值分配给您的javascript变量,并动态填充字段。