你如何使用Laravel 4中的子表单

时间:2013-09-09 17:51:33

标签: php validation symfony laravel

我正在尝试找到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,那么这些人如何使用这些呢?我是唯一一个?我确定这只是命名约定的问题,我可能没有使用正确的术语来搜索我的文档

2 个答案:

答案 0 :(得分:0)

有什么理由不把它们变成单独的输入?

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

我确信您已经意识到,这意味着在您的表单处理代码中单独处理每一个。

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

答案 1 :(得分:0)

Ahhhhh最终找到了它:

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中挖掘一点,但能够在那里找到解释它是如何工作的示例和代码。

希望这有助于其他人......