从多个表单Laravel获取数据

时间:2016-01-26 10:05:21

标签: php laravel laravel-5.2

我在Laravel工作。我有一个刀片视图页面,在其上创建了多个表单(相同型号)。现在,我想,当我单击提交按钮时,应该将所有表单的数组返回给控制器。但是,它只返回一个表单而不是数组的数据。我怎样才能做到这一点,任何人都可以帮助我吗?

4 个答案:

答案 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]);
}

我不知道您的数据结构,因为您没有将其包含在您的问题中,但这应该足以让您应用于您的给定方案。

相关问题