我有这样的输入形式:(使用Laravel的刀片模板引擎,但html应该很容易理解,最终是微不足道的)
{{ Form::text('amount[]', Input::old('amount')) }}
<?php echo Form::select('unit[]',
array(
'whole' => _('whole'),
'ml' => _('milliliter'),
'l' => _('liter'),
'dl' => _('deciliter'),
'mg' => _('milligram'),
'g' => _('gram'),
'kg' => _('kilogram'),
'tsp' => _('teaspoon'),
'tbs' => _('tablespoon'),
)) ?>
{{ Form::text('ingredient[]', Input::old('ingredient')) }}
我正在尝试将其格式化为我的数据库以将其返回到以下字符串中:
<li><span>1</span> liter red wine</li>
我正在考虑将它变成一个更简单的形式并取消单位测量,迫使我的用户输入它而不是灵活性,但我仍然需要将它全部压缩到我的数据库的一个表中。 span标记在jQuery中用于动态增加数量,因此需要。我已经在这里休息了很多天,但我无法破解如何做到这一点。
这是我的格式化逻辑:
$amount = Input::get('amount[]');
$unit = Input::get('unit[]');
$ingredient = Input::get('ingredient[]');
for ( $i = 0, $c = count(Input::get('ingredient[]')); $i < $c; $i++ )
{
$ingredients .= '<li><span>'.$amount[$i].'</span>'.$unit[$i].' '.$ingredient[$i].'</li>';
}
我用
发送$new = Recipe::create(array(
'title' => Input::get('title'),
'curiousity' => Input::get('curiousity'),
'ingredients' => $ingredients,
'steps' => Input::get('recipe')
));
我尝试了很多方法,我得到的错误就像没有定义$ ingredients数组或者无法在变量中使用[]。我尝试将变量定义为'$ ingredients ='';'变量,但只产生一个空字符串。我的问题必须在逻辑中。
答案 0 :(得分:3)
为简洁起见,在表单之外构建您的选择列表以及(无论如何我要做的是保持控制器非常纤薄)一次性将输入发送到模型。
$input = Input::all();
$new = Recipe::create($input);
为其他地方的成分构建阵列。在模型中(也许?):
$ingredients = array(
'dbname1' => 'displayname1',
'dbname2' => 'displayname2'
);
并相应地显示它,然后表单输入应该使用数组中的$ input发送,您可以解析然后保存到数据库。
有关Blade语法的其他说明。我不知道需要定义数组括号[]。
{{Form::open()}}
{{Form::label('label1','Display Label 1')}}
{{Form::text('fieldname1',Input::old('fieldname1'))}}
已经构建了您的成分数组(您当前的语法将生成一个下拉列表,我假设您需要复选框)
{{Form::select('ingredientsFIELDNAME',$ingredients)}}
{{Form::close()}}
在您的Input :: all()数组中,如果您将其构建为复选框而不是选择,则componentsFIELDNAME字段名称将具有数组。希望这一切都有意义。