Laravel - 从 8 个单独的表格中收集数据
Laravel - gather data in array from 8 separate forms
我需要收集来自 8 个不同表单的表单数据。我需要所有的形式都是子数组,并且只有 1 个包含所有子数组的数组。这种结构的原因是我将根据子数组以不同的方式操作内容。
每个表单都有自己的提交按钮,目前不需要一次提交所有表单。
下面是其中 2 个表格的代码。
问题:如果我两个表格都填了,为什么我在[=78中看不到[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
)
)
我的代码:
[routes/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;
class FormHandler 扩展 Controller
{
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'));
}
}
我想我明白你想做什么,当你向服务器发出请求时,它将创建一个新的 Laravel 实例来处理请求,因此任何对象(即控制器对象您尝试将请求输入附加到的那个)将是新的,因此新请求将无法访问 $this->result,因为它是控制器的新实例。访问它的唯一方法是将其存储在数据库中,然后再次访问,或者为每个请求发送所有表单中的所有数据。从不同的请求访问数据根本不可能(您也不希望如此)。
您可以考虑使用 Redis 在请求之间在内存中缓存数据,这可能是解决此类问题的最常见方法。
我需要收集来自 8 个不同表单的表单数据。我需要所有的形式都是子数组,并且只有 1 个包含所有子数组的数组。这种结构的原因是我将根据子数组以不同的方式操作内容。
每个表单都有自己的提交按钮,目前不需要一次提交所有表单。
下面是其中 2 个表格的代码。
问题:如果我两个表格都填了,为什么我在[=78中看不到[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
)
)
我的代码:
[routes/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;
class FormHandler 扩展 Controller {
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'));
}
}
我想我明白你想做什么,当你向服务器发出请求时,它将创建一个新的 Laravel 实例来处理请求,因此任何对象(即控制器对象您尝试将请求输入附加到的那个)将是新的,因此新请求将无法访问 $this->result,因为它是控制器的新实例。访问它的唯一方法是将其存储在数据库中,然后再次访问,或者为每个请求发送所有表单中的所有数据。从不同的请求访问数据根本不可能(您也不希望如此)。
您可以考虑使用 Redis 在请求之间在内存中缓存数据,这可能是解决此类问题的最常见方法。