可以在动态创建的字段中显示输入的数据吗?

时间:2016-10-18 01:36:49

标签: php forms laravel laravel-5 laravel-5.2

我正在使用Laravel 5.3.18构建一个允许用户输入一个或多个日期的表单。我还使用Laravel Collective中的HTML / Form库以及FormRequest对象来验证字段。我的问题是当用户动态添加更多日期输入(通过JavaScript)并提交表单时,如果它没有通过验证,则动态地"添加的数据(和输入)不会在表单上重新显示。

我的问题是:Laravel是否处理此用例?如果是这样,我怎样才能做到这一点(或者我做错了什么)?非常感谢您的见解和帮助!

以下是最初生成日期输入的实际代码片段:

@foreach ($eventDates as $index=>$eventDate)
    <div class="form-group{{ $errors->has('eventDates.'.$index.'.start_datetime') ? ' has-error' : '' }}" id="{{ 'event_date_group_'.$index }}">
        {!! Form::label('eventDates['.$index.'][start_datetime]', 'Event Dates (Day '.($index + 1).')', ['class' => 'col-md-4 control-label']) !!}
        <div class="col-md-3">
            {!! Form::text('eventDates['.$index.'][start_datetime]', $eventDate['start_datetime'], ['id' => 'start_datetime_'.$index, 'class' => 'datetimepicker form-control']) !!}
            @if ($errors->has('eventDates.'.$index.'.start_datetime'))
                <span class="help-block"><strong>{{ $errors->first('eventDates.'.$index.'.start_datetime') }}</strong></span>
            @endif
        </div>
    </div>
@endforeach 

生成这个:

<div class="form-group" id="event_date_group_0">
    <label for="eventDates[0][start_datetime]" class="col-md-4 control-label">Event Dates (Day 1)</label>
    <div class="col-md-3">
        <input id="start_datetime_0" class="datetimepicker form-control" name="eventDates[0][start_datetime]" type="text">
    </div>
</div>

因此,如果用户动态创建另一个日期输入,它将如下所示:

<div class="form-group" id="event_date_group_0">
    <label for="eventDates[0][start_datetime]" class="col-md-4 control-label">Event Dates (Day 1)</label>
    <div class="col-md-3">
        <input id="start_datetime_0" class="datetimepicker form-control" name="eventDates[0][start_datetime]" type="text">
    </div>
</div>
<div class="form-group" id="event_date_group_1">
    <label for="eventDates[1][start_datetime]" class="col-md-4 control-label">Event Dates (Day 2)</label>
    <div class="col-md-3">
        <input id="start_datetime_1" class="datetimepicker form-control" name="eventDates[1][start_datetime]" type="text">
    </div>
</div>

这是我的FormRequest对象的一部分:

public function rules() {
    return [
        'name' => 'required|max:100',
        'eventDates.*.start_datetime' => 'required',
        'eventDates.*.end_datetime' => 'required',
       ...
    ];
}

public function messages() {
    return [
        'eventDates.*.start_datetime.required' => 'Start date/time is required.',
        'eventDates.*.end_datetime.required' => 'End time is required.',
        ...
    ];
}

最后,验证有效。错误消息显示日期输入。实际上,如果我动态创建额外日期输入。填写所有内容,但只将动态日期输入留空,验证将失败,表单将重新显示,但动态输入和数据不会显示。我还在模板中放入了以下调试语句,以查看数组中有多少元素返回,并且它总是只显示1。

<p>Number of Dates: {{ count($eventDates) }}</p>

0 个答案:

没有答案