Php 验证Laravel 5中动态添加的输入字段
问题: 需要动态验证添加的输入字段 以下是UI的屏幕截图: 情景1: 添加一个新的时间表,验证可以完美地工作 使用表单请求文件验证表单:Php 验证Laravel 5中动态添加的输入字段,php,jquery,validation,laravel-5,Php,Jquery,Validation,Laravel 5,问题: 需要动态验证添加的输入字段 以下是UI的屏幕截图: 情景1: 添加一个新的时间表,验证可以完美地工作 使用表单请求文件验证表单: public function rules() { $rules = [ 'name' => 'required|max:255', 'due_at' => 'required|date_format:Y-m-d', 'users' => 'required', 'ta
public function rules()
{
$rules = [
'name' => 'required|max:255',
'due_at' => 'required|date_format:Y-m-d',
'users' => 'required',
'task_name' => 'required|max:255'
];
if($this->request->get('task_name')){
foreach($this->request->get('task_name') as $key => $val)
{
$rules['task_name.'.$key] = 'required|max:255';
$rules['task_description.'.$key] = 'required|max:255';
}
}
return $rules;
}
public function messages()
{
$messages = [];
foreach($this->request->get('task_name') as $key => $val) {
$messages['task_name.'.$key.'.max'] = 'The field labeled task name must be less than :max characters.';
$messages['task_name.'.$key.'.required'] = 'The field task name is required.';
$messages['task_description.'.$key.'.max'] = 'The field task description must be less than :max characters.';
$messages['task_description.'.$key.'.required'] = 'The field task description is required.';
}
return $messages;
}
场景2:更新现有计划。此操作失败,我收到以下错误消息:
helpers.php第454行中的ErrorException:
htmlentities()希望参数1是字符串,数组给定(视图:/Users/petestwart/Documents/Git Repos/../resources/views/schedules/partials/_-form.blade.php)(视图:/Users/../Documents/Git Repos/../resources/views/schedules/partials/_-form.blade.php)
以下是计划控制器更新功能:
/**
* Update the specified resource in storage.
*
* @param \App\Schedule $schedule
* @return Response
*/
public function update(Schedule $schedule, ScheduleRequest $request)
{
$schedule->name = $request->name;
$schedule->apiary_id = $request->apiary_id;
$schedule->due_at = $request->due_at;
$schedule->update();
// Attach users to the new schedule
$schedule->users()->sync($request->get('users'));
// Save the tasks
if($request->get('task_name')){
foreach($request->get('task_name') as $key => $task_name)
{
//if(empty($task_name)) continue; // If a task is empty then skip to the next one
// Check if task exists and update task
if(!empty($request->task[$key])){
$task = Task::find($request->task[$key]);
$task->name = $task_name;
$task->description = $request->task_description[$key];
$task->update();
}else{
// Add new task
$task = new Task();
$task->name = $task_name;
$task->description = $request->task_description[$key];
$task->schedule_id = $schedule->id;
$task->save();
}
};
};
return Redirect::to('schedules')->with('success', trans('messages.update', ['name' => 'Schedule']));
}
这是HTML表单:
@if(isset($tasks))
@foreach($tasks as $task)
<div class="task-item row form-group">
{!! Form::hidden('task[]', $task->id) !!}
<a href="{{ route('schedules.task.delete', $task) }}" class="btn btn-danger btn-sm task-delete-btn" data-method="delete" data-confirm="Are you sure you want to delete this task?"><span class="fa fa-trash"></span></a>
<div class="col-sm-4 task-name">
{!! Form::label('task_name', 'Task Name', array('class'=>'control-label')) !!}
{!! Form::text('task_name[]', $task->name, array('class'=>'form-control')) !!}
</div>
<div class="col-sm-8">
{!! Form::label('task_description', 'Task Description', array('class'=>'control-label')) !!}
{!! Form::text('task_description[]', $task->description, array('class'=>'form-control')) !!}
</div>
</div>
@endforeach
@else
@if(Form::old('task_name'))
@foreach(old('task_name') as $key => $val)
<div class="task-item row form-group">
<a href="#" class="btn btn-default btn-sm remove-task"><span class="fa fa-minus"></span></a>
<div class="col-sm-4 task-name {!! $errors->first('task_name.'.$key, 'has-error') !!}">
{!! Form::label('task_name', 'Task Name', array('class'=>'control-label')) !!}
{!! Form::text('task_name['.$key.']', old('task_name.'.$key), array('class'=>'form-control')) !!}
{!! $errors->first('task_name.'.$key, '<p>:message</p>') !!}
</div>
<div class="col-sm-8 {!! $errors->first('task_description.'.$key, 'has-error') !!}">
{!! Form::label('task_description', 'Task Description', array('class'=>'control-label')) !!}
{!! Form::text('task_description['.$key.']', old('task_description.'.$key), array('class'=>'form-control')) !!}
{!! $errors->first('task_description.'.$key, '<p>:message</p>') !!}
</div>
</div>
@endforeach
@else
<div class="task-item row form-group">
<a href="#" class="btn btn-default btn-sm remove-task"><span class="fa fa-minus"></span></a>
<div class="col-sm-4 task-name">
{!! Form::label('task_name', 'Task Name', array('class'=>'control-label')) !!}
{!! Form::text('task_name[]', null, array('class'=>'form-control')) !!}
{!! $errors->first('task_name', '<p>:message</p>') !!}
</div>
<div class="col-sm-8">
{!! Form::label('task_description', 'Task Description', array('class'=>'control-label')) !!}
{!! Form::text('task_description[]', null, array('class'=>'form-control')) !!}
</div>
</div>
@endif
@endif
<a href="#" class="btn btn-default btn-sm" id="add-task"><span class="fa fa-plus"></span></a>
@if(isset($tasks))
@foreach($tasks作为$task)
{!!Form::hidden('task[]',$task->id)!!}
{!!Form::label('task_name','task name',array('class'=>'control-label'))
{!!Form::text('task_name[]',$task->name,array('class'=>'Form-control'))
{!!Form::label('task_description','task description',array('class'=>'control-label'))
{!!Form::text('task_description[]',$task->description,array('class'=>'Form-control'))!!}
@endforeach
@否则
@if(Form::old('task_name'))
@foreach(旧('task_name')为$key=>$val)
{!!Form::label('task_name','task name',array('class'=>'control-label'))
{!!Form::text('task_name['.$key.]',old('task_name.'.$key'),array('class'=>'Form-control'))!!}
{!!$errors->first('task_name..$key,:message)
{!!Form::label('task_description','task description',array('class'=>'control-label'))
{!!Form::text('task_description['.$key.]',old('task_description.'.$key')),array('class'=>'Form-control'))
{!!$errors->first('task_description.'.$key,:message)
@endforeach
@否则
{!!Form::label('task_name','task name',array('class'=>'control-label'))
{!!Form::text('task_name[],null,array('class'=>'Form-control'))
{!!$errors->first('task_name',':message')
{!!Form::label('task_description','task description',array('class'=>'control-label'))
{!!Form::text('task_description[],null,array('class'=>'Form-control'))
@恩迪夫
@恩迪夫
最后是负责添加和删除任务的Jquery:
var TaskList = {
addTaskBtn: $('#add-task'),
completeTaskBtn: $('.task-complete-btn'),
deleteTaskBtn: $('.task-delete-btn'),
taskTemplate: '<div class="task-item row form-group"> \
<a href="#" class="btn btn-default btn-sm remove-task"><span class="fa fa-minus"></span></a> \
<div class="col-sm-4 task-name"> \
<label for="task_name" class="control-label">Task Name</label> \
<input class="form-control" name="task_name[]" type="text"> \
</div> \
<div class="col-sm-8"> \
<label for="task_description" class="control-label">Task Description</label> \
<input class="form-control" name="task_description[]" type="text"> \
</div> \
</div>',
init: function() {
this.bindUIActions();
},
bindUIActions: function() {
// Add new task item
this.addTaskBtn.click(function () {
$('.task-item:last').after(TaskList.taskTemplate);
var newTask = $('.task-item:last');
newTask.find('input[type=text]:first').focus();
return false;
});
$(document).on('click', 'a.remove-task', function (e) {
if($(this).parent().is(':first-child')){
$(this).parent().find('input[type=text]').val('');
return;
};
$(this).parent().remove();
return false;
});
// Set task as complete via AJAX
this.completeTaskBtn.change(function () {
var h3 = $(this).parent().parent().parent().parent().find('h3');
var CSRF_TOKEN = $('meta[name="csrf-token"]').attr('content');
var url = '/schedules/update-task';
$.ajax({
type: 'POST',
url: url,
data: {
id: $(this).attr('id'),
complete: $(this).is(':checked')? 1 : 0,
'_token': CSRF_TOKEN
},
dataType: 'JSON',
success: function (data) {
h3.find('span').remove();
h3.append(data.status_label);
}
});
return false;
});
// Delete Task via AJAX
this.deleteTaskBtn.click(function () {
var taskWrapper = $(this).parent();
var CSRF_TOKEN = $('meta[name="csrf-token"]').attr('content');
var url = $(this).attr('href');
if (confirm('Are you sure you want to delete this task?')) {
$.ajax({
type: 'DELETE',
url: url,
data: {
'_token': CSRF_TOKEN
},
dataType: 'JSON',
success: function (data) {
taskWrapper.remove();
}
});
}
return false;
});
},
};
var任务列表={
addTaskBtn:$(“#添加任务”),
completeTaskBtn:$('.task complete btn'),
deleteTaskBtn:$('.task delete btn'),
任务模板:'\
\
\
任务名称\
\
\
\
任务描述\
\
\
',
init:function(){
这个.bindUIActions();
},
bindUIActions:function(){
//添加新任务项
this.addTaskBtn.click(函数(){
$('.task item:last')。在(TaskList.taskTemplate)之后;
var newTask=$('.task项:last');
newTask.find('input[type=text]:first').focus();
返回false;
});
$(文档).on('click','a.remove-task',函数(e){
如果($(this).parent()是(':first child')){
$(this).parent().find('input[type=text]').val(“”);
返回;
};
$(this.parent().remove();
返回false;
});
//通过AJAX将任务设置为完成
此.completeTaskBtn.change(函数(){
var h3=$(this.parent().parent().parent().parent().find('h3');
var CSRF_TOKEN=$('meta[name=“CSRF TOKEN”]”)。attr('content');
var url='/schedules/updatetask';
$.ajax({
键入:“POST”,
url:url,
数据:{
id:$(this.attr('id'),
完成:$(this).is(':checked')?1:0,
“_令牌”:CSRF_令牌
},
数据类型:“JSON”,
成功:功能(数据){
h3.find('span').remove();
h3.附加(数据、状态和标签);
}
});
返回false;
});
//通过AJAX删除任务
this.deleteTaskBtn.click(函数(){
var taskWrapper=$(this.parent();
var CSRF_TOKEN=$('meta[name=“CSRF TOKEN”]”)。attr('content');
var url=$(this.attr('href');
如果(确认('您确定要删除此任务吗?')){
$.ajax({
键入:“删除”,
url:url,
数据:{
“_令牌”:CSRF_令牌
},
数据类型:“JSON”,
成功:功能(数据){
taskWrapper.remove();
}
});
}
返回false;
});
},
};
如果您在更新日程安排时能提供任何帮助来验证,我们将不胜感激。非常感谢 用下面的方法解决了这个问题,不确定这是否是最好的选择
@if(Form::old('task_name'))
@foreach(old('task_name') as $key => $val)
<div class="task-item row form-group">
<a href="#" class="btn btn-default btn-sm remove-task"><span class="fa fa-minus"></span></a>
<div class="col-sm-4 task-name {!! $errors->first('task_name.'.$key, 'has-error') !!}">
{!! Form::label('task_name', 'Task Name', array('class'=>'control-label')) !!}
{!! Form::text('task_name['.$key.']', old('task_name.'.$key), array('class'=>'form-control')) !!}
{!! $errors->first('task_name.'.$key, '<p>:message</p>') !!}
</div>
<div class="col-sm-8 {!! $errors->first('task_description.'.$key, 'has-error') !!}">
{!! Form::label('task_description', 'Task Description', array('class'=>'control-label')) !!}
{!! Form::text('task_description['.$key.']', old('task_description.'.$key), array('class'=>'form-control')) !!}
{!! $errors->first('task_description.'.$key, '<p>:message</p>') !!}
</div>
</div>
@endforeach
@elseif(isset($tasks))
@foreach($tasks as $task)
<div class="task-item row form-group">
{!! Form::hidden('task[]', $task->id) !!}
<a href="{{ route('schedules.task.delete', $task) }}" class="btn btn-danger btn-sm task-delete-btn" data-method="delete" data-confirm="Are you sure you want to delete this task?"><span class="fa fa-trash"></span></a>
<div class="col-sm-4 task-name">
{!! Form::label('task_name', 'Task Name', array('class'=>'control-label')) !!}
{!! Form::text('task_name[]', $task->name, array('class'=>'form-control')) !!}
</div>
<div class="col-sm-8">
{!! Form::label('task_description', 'Task Description', array('class'=>'control-label')) !!}
{!! Form::text('task_description[]', $task->description, array('class'=>'form-control')) !!}
</div>
</div>
@endforeach
@else
<div class="task-item row form-group">
<a href="#" class="btn btn-default btn-sm remove-task"><span class="fa fa-minus"></span></a>
<div class="col-sm-4 task-name">
{!! Form::label('task_name', 'Task Name', array('class'=>'control-label')) !!}
{!! Form::text('task_name[]', null, array('class'=>'form-control')) !!}
{!! $errors->first('task_name', '<p>:message</p>') !!}
</div>
<div class="col-sm-8">
{!! Form::label('task_description', 'Task Description', array('class'=>'control-label')) !!}
{!! Form::text('task_description[]', null, array('class'=>'form-control')) !!}
</div>
</div>
@endif
public function update(Schedule $schedule, ScheduleRequest $request)
{
$schedule->name = $request->name;
$schedule->apiary_id = $request->apiary_id;
$schedule->due_at = $request->due_at;
$schedule->update();
// Sync users to the schedule
$schedule->users()->sync($request->get('users'));
// Remove all tasks and add as new
$schedule->tasks()->delete();
// Save the tasks
if($request->get('task_name')){
foreach($request->get('task_name') as $key => $task_name)
{
//if(empty($task_name)) continue; // If a task is empty then skip to the next one
// // Check if task exists and update task
// if(isset($request->task[$key])){
// $task = Task::find($request->task[$key]);
// $task->name = $task_name;
// $task->description = $request->task_description[$key];
// $task->update();
// }else{
// Add new task
$task = new Task();
$task->name = $task_name;
$task->description = $request->task_description[$key];
$task->schedule_id = $schedule->id;
$task->save();
//}
};
};
return Redirect::to('schedules')->with('success', trans('messages.update', ['name' => 'Schedule']));
}