【问题标题】:Laravel - gather data in array from 8 separate formsLaravel - 从 8 个不同的表单中收集数据
【发布时间】:2020-11-27 20:08:03
【问题描述】:

我需要收集来自 8 种不同表单的表单数据。我需要所有表单都是子数组,并且只有 1 个数组包含所有子数组。这种结构的原因是我将根据子数组以不同的方式操作内容。

每个表单都有自己的提交按钮,目前不需要一次请求提交所有表单。

以下是其中 2 个表格的代码。

问题:如果我填写了两个表格,为什么我在最后一次运行表格时在 print_r 结果中没有看到 [form_1] 和 [form_2]?

如何解决它的理论包括一个负责合并所有子数组表单数据的构造函数。

结果:

Array
(
    [form_1] => Array
        (
            [user] => 123
        )

)

Array
(
    [form_2] => Array
        (
            [user] => 456
        )

)

想要的结果:(应该是8,演示只显示2):

Array
(
    [form_1] => Array
        (
            [user] => 123
        )
    [form_2] => Array
        (
            [user] => 456
        )

)

我的代码:


[路由/web.php]:

Route::get('/form-1', function () {
    return view('form_1');
});

Route::get('/form-2', function () {
    return view('form_2');
});

Route::post("/process_form_1", "FormHandler@result_1");
Route::post("/process_form_2", "FormHandler@result_2");

[Form_1.blade.php]:

Form-1

<form action="/process_form_1" method="post">

  @csrf
  <label for="1">Name</label>
  <input id="1" type="text" name="user"><br>
  <button submit="button" name="button">Send</button>

</form>

[Form_2.blade.php]:

Form-2

<form action="/process_form_2" method="post">

  @csrf
  <label for="1">Name</label>
  <input id="1" type="text" name="user"><br>
  <button submit="button" name="button">Send</button>

</form>

[FormHandler.php]:

命名空间 App\Http\Controllers;

使用 Illuminate\Http\Request;

类 FormHandler 扩展控制器 {

function result_1(Request $request)
{

  $this->result['form_1'] = $request->input();

  echo "<pre>";
  print_r($this->result);
  echo "</pre>";

// return (redirect('form-1'));

}

function result_2(Request $request)
{

  $this->result['form_2'] = $request->input();

  echo "<pre>";
  print_r($this->result);
  echo "</pre>";

// return (redirect('form-2'));

}

}

【问题讨论】:

  • 那么您是否希望在一个请求中提交所有表单?
  • @BenGooding 不,每个表单都会有一个发布按钮,并且应该存储一个子数组的内容,但是由于该子数组具有唯一的名称,它不会覆盖“master_array”中其他 7 个表单的数据"。
  • 我想我明白了你在做什么,当你向服务器发出请求时,它会创建一个新的 laravel 实例来处理请求,因此任何对象(即控制器对象)您尝试将请求附加到) 将是新的,因此新请求将无法访问 $this->result,因为它是控制器的新实例。访问它的唯一方法是将其存储在数据库中,然后再次访问,或者为每个请求发送所有表单中的所有数据。根本不可能(您也不希望这样)从不同的请求访问数据。
  • 您可以考虑使用 redis 在请求之间缓存数据,这可能是此类问题最常见的解决方案
  • @BenGooding 我试试 Redis。您可以将您的 cmets 移至答案,我会批准它。

标签: laravel forms laravel-7.x


【解决方案1】:

我想我明白了你想要做什么,当你向服务器发出请求时,它会创建一个新的 Laravel 实例来处理请求,从而处理任何对象(即你试图附加的控制器对象请求输入) 将是新的,因此新请求将无法访问 $this->result,因为它是控制器的新实例。访问它的唯一方法是将其存储在数据库中,然后再次访问,或者为每个请求发送所有表单中的所有数据。根本不可能(您也不希望这样)从不同的请求访问数据。

您可以考虑使用 Redis 在请求之间将数据缓存在内存中,这可能是此类问题的最常见解决方案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-18
    • 2019-09-20
    相关资源
    最近更新 更多