1

我试图找到 laravel 4 在请求中处理数组数据的方式,但在网上找不到任何示例、教程和文档。

例子:

<select name="productDetails[0][service]">...</select>
<select name="productDetails[0][product]">...</select>
<select name="productDetails[0][action]">...</select>
<select name="productDetails[1][service]">...</select>
<select name="productDetails[1][product]">...</select>
<select name="productDetails[1][action]">...</select>

最终成为:

$_GET['productDetails'][0]['service']
$_GET['productDetails'][0]['product']
$_GET['productDetails'][0]['action']
$_GET['productDetails'][1]['service']
$_GET['productDetails'][1]['product']
$_GET['productDetails'][1]['action']

现在,如果我想让我的表单正常工作,我已经读取了这些数据,但我不能假设 productDetails 是一个数组并且特征为 0。我想使用 Laravel/Symfony 的 HTTP Foundation 组件提供的设施。

我试过无济于事:

Request::get('productDetails.0.service', null); //Doesn't work
Request::get('productDetails[0][service]', null); //Doesn't work
Request::get('productDetails.1.service', null); //Doesn't work
Request::get('productDetails[1][service]', null); //Doesn't work

我认为这些版本会起作用,因为您可以访问会话、配置以及可能许多其他类似的数据源。只是难倒这行不通...另一方面,以下代码段有效,但这很丑陋,因为您不能始终假设 productDetails 是一个数组,也不能假设存在 0 索引或“服务“索引太...

Request::get('productDetails', array())[0]['service']; //Works but ugly
Request::get('productDetails', array())[1]['service']; //Works but ugly

那么实现这一目标的正确方法是什么?


编辑#1

在标签中添加了 symfony,我现在意识到来自 Laravel 的 Request 对象确实是来自 symfony 的 HTTPFoundation,那么这些人是如何处理这一切的呢?我是唯一一个?我确定这只是命名约定的问题,我可能没有使用正确的术语来搜索我的文档

4

2 回答 2

1

啊啊啊终于找到了:

Request::query('productDetails[0]', array()); //array('service' => 2, 'product' => null, 'action' => null);
Request::query('productDetails[1]', array()); //array('service' => 3, 'product' => null, 'action' => null);
Request::query('productDetails[0][service]', array()); //2
Request::query('productDetails[1][service]', array()); //3

不得不在 Request 类和 Symfony HTTPFoundation 中进行一些挖掘,但能够在其中找到解释其工作原理的示例和代码。

希望这对其他人有帮助...

于 2013-09-09T19:56:54.957 回答
0

有什么理由不将它们切换为单独的输入?

<select name="productDetailService">...</select>
<select name="productDetailsProduct">...</select>
<select name="productDetailsAction">...</select>

我相信你意识到,这意味着在你的表单处理代码中分别处理每一个。

但是,如果您不尝试制作需要productDetails临时添加新字段的表单,我认为没有理由通过以这种方式使用数组来使代码更加混乱 - 分别处理每个数组或处理它们作为单独的字段(与数组中的聚合相比)可能是更好的方法。

于 2013-09-09T19:22:36.443 回答