我在Laravel工作。我有一个刀片视图页面,在其上创建了多个表单(相同型号)。现在,我想,当我单击提交按钮时,应该将所有表单的数组返回给控制器。但是,它只返回一个表单而不是数组的数据。我怎样才能做到这一点,任何人都可以帮助我吗?
答案 0 :(得分:2)
这不是一个真正的Laravel问题。
诀窍是每个提交按钮使用不同的表单。然后,这很简单。检查提交的按钮。
if ($request->isMethod('post')) {
if ($request->has('submit_button_form_1')) {
// Handle form
}
elseif ($request->has('submit_button_form_2')) {
// Handle form
}
elseif ($request->has('submit_button_form_3')) {
// Handle form
}
}
答案 1 :(得分:0)
你可以做的是你需要使用命名结构循环表单字段first_name1,first_name2,依此类推。然后,在提交表单后,您可以以相同的方式使用循环验证并获取值。您可以在此处查看我的示例代码。它计算要进行的循环次数。
您可以将计数器从视图传递到隐藏字段中的控制器。然后,您可以循环验证和获取输入。
检查我的示例代码:
//determine number of rows in database
$number_of_loop = Input::get('number_of_loop');
$arrayList = []; //defining the array variable
//declaring the validations rules
for($i = 1; $i < $number_of_loop; $i++){
$rules = array(
'currency'.$i => 'required',
'iso_code'.$i => 'required',
'symbol'.$i => 'required',
'status'.$i => 'required'
);
$validator = Validator::make(Input::all(), $rules);
if($validator->fails()){
return Redirect::back()->withErrors($validator)->withInput();
}
}
for ($i=1; $i <= $number_of_loop; $i++) {
$new_currency = new stdClass();
$currency = Input::get('currency' . $i);
$iso_code = Input::get('iso_code'.$i);
$symbol = Input::get('symbol'.$i);
$conversion_rate = Input::get('conversion_rate'.$i);
$status = Input::get('status'.$i);
$new_currency->currency = $currency;
$new_currency->iso_code = $iso_code;
$new_currency->symbol = $symbol;
$new_currency->conversion_rate = $conversion_rate;
$new_currency->enable = $status;
array_push($arrayList, $new_currency);
}
<强> UPDATE1 强>
要存储所有记录,请创建一个数组和一个新的stdclass。将所有变量存储在stdclass属性中。最后,将新的stdclass推送到数组。然后,您可以访问表单的所有输入。检查以上更新的代码示例
答案 2 :(得分:0)
首先,我不认为你可以发送多种形式,这就是它的方式。 你有两个选择。
首先:使用所有表单中的所有字段创建一个表单,然后在控制器中,您只需要获取所需的字段,就像您从数组中所做的那样。 喜欢:
$all_fields= Request::all();
and then
$all_fields['something'], $all_fields['something_else'],
第二:使用ajax,您可以操作和发送您需要的字段,字段的值。
答案 3 :(得分:0)
如果您使用的是Laravel 5.2,则可以验证阵列数据。您需要将所有输入放在一个表单中,因为您无法发送多个表单。如果每个表单的action
属性都有不同的网址,那该怎么办?
要将数据作为数组发送,您可以使用name
后缀[]
属性:
{!! Form::open() !!}
{!! Form::text('name[]') !!}
{!! Form::text('name[]') !!}
{!! Form::text('name[]') !!}
{!! Form::close() !!}
提交此表单时,name
将是一个包含三个元素的数组。
要验证,请在验证规则名称中使用通配符:
return [
'name.*' => 'required|max:255',
];
然后,您可以通过Request
对象访问控制器中的名称数组:
$names = $request->get('names', []);
foreach ($names as $name) {
User::create(['name' => $name]);
}
我不知道您的数据结构,因为您没有将其包含在您的问题中,但这应该足以让您应用于您的给定方案。