2016-01-26 98 views
0

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

+0

你不能发送多个表单aaik,你不能只是合并所有的领域? –

+0

我如何合并它们? –

+0

只需将所有字段放在相同的'

'标签中......如果您想要某种分离(逻辑,语义等),您可以通过'
'或其他结构和正确的样式 –

回答

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推送到数组中。然后,您可以访问表单的所有输入。检查以上更新的代码示例

+0

感谢您的代码。但这不适用于我的情况。如果我这样做,我从多个数据中只获得最后一个表格的数据。 –

+0

您需要在每个循环中保存数据。否则,只会从最后一个循环获取值。首先保存每个循环中的记录并从数据库访问。 – vijayrana

+0

抱歉,我无法更好地解释它。假设,当我运行循环时,说4次,每次迭代都有最后一种形式的数据。我用回声测试了它。 –

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 
    } 
} 
+0

感谢@Schellingerht的代码。但是,我已经把所有这些多种形式都放在一个单一的表格中。现在你可以说,所有的形式都是这种单一形式的孩子。 –

+0

子表单不是有效的html。另见http://stackoverflow.com/questions/379610/can-you-nest-html-forms。分离更好,所以你可以处理不同的形式。 – schellingerht

0

首先,我不认为你可以发送多种形式,这只是它的方式。 你有两种选择。

第一:用所有形式的所有字段创建一个表单,然后在控制器中,您只需要输入你想要的字段,就像你从数组中做同样的事情一样。 像:

$all_fields= Request::all(); 
and then 
$all_fields['something'], $all_fields['something_else'], 

二:使用Ajax,您可以处理和发送领域,你需要字段的值。

+0

感谢@MasterSith。但是我不能只将所有的字段放在一个表单中,因为这些多个表单是通过点击按钮动态生成的。当用户想要插入更多的数据时,他只需点击按钮,并在已有的数据下添加新的表单。然后在提交父窗体单击时,我想将所有子窗体的数据作为数组返回。但我明白你的意思,我们不能发送多个表格。感谢那。我会尝试一些其他方式。 –

+0

然后使用ajax,它会从输入中获取值并将它们发送给控制器,你可以创建数组,或者你喜欢什么。 – MasterSith

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

我不因为你没有将它包含在你的问题中,所以知道你的数据结构,但这应该足以让你适用于你的情况。