1

我有这个输入表单:(使用带有 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 = '';' 变量,但这只是产生了一个空字符串。我的问题一定出在逻辑上。

4

1 回答 1

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() 数组中,如果您已将它构建为复选框而不是选择,那么您的 ingredientsFIELDNAME 字段名称将具有一个数组。希望这一切都有意义。

于 2012-11-21T17:30:00.463 回答