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>

私はそれをより単純な形式にし、柔軟性のためにユーザーに入力を強制する単位測定を排除することを検討していますが、それでもデータベース用にすべてを1つのテーブルにまとめる必要があります。スパンタグは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')
));

さまざまな方法を試しましたが、$ components配列が定義されていない、変数で[]を使用できないなどのエラーが発生します。変数を「$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() 配列では、選択ではなくチェックボックスとして構築した場合、成分FIELDNAME フィールド名に配列が含まれます。これがすべて理にかなっていることを願っています。

于 2012-11-21T17:30:00.463 に答える