4

Webフォームには、select-optionフィールドがあります。値'card'(引用符なし)またはNULL値を送信する必要があります。

これで、コードは次のようになります。

    $options = array(NULL => 'Invoice', 'card' => 'Payment card');
    echo $this->Form->input('payment_method', array('options'=>$options));

請求書オプションが選択されている場合、データベーステーブル(および/または「カード」、またはその両方でNULL値を送信するためにオプション配列を定義するにはどうすればよいですか?もちろんそれは機能します)?

前もって感謝します!

4

1 に答える 1

4

NULLは、連想配列の無効なキーです。'integers'と'strings'のみが有効な配列キーです。ドキュメントを参照してください:配列

フォームを介して空の値を送信するには、空の文字列を使用できます。データベースにNULL値を強制的に挿入するには、保存する前にモデルまたはコントローラー内でこれを処理します

$options = array('' => 'Invoice', 'card' => 'Payment card');
echo $this->Form->input('payment_method', array('options'=>$options));

次に、コントローラーの内部。

if ('' === $this->request->data['MyModelName']['payment_method']) {
     this->request->data['MyModelName']['payment_method'] = null;
}

代替アプローチ

ただし、「請求書」の支払い方法に値を使用してみませんか?このような:

echo $this->Form->input('payment_method', array(
    'options' => array(
        ''        => 'Select your payment method..',
        'invoice' => 'Invoice',
        'card'    => 'Payment card',
    )
));

IMOこれにはいくつかの利点があります。

  • より透過的です。たとえば、データベースの内部を見ると、支払い方法が「請求書」であることが明らかです。「特別な」値(null)を使用することにより、アプリケーションの内部動作を知らない人は、ソースコードを参照して見つける必要があります。
  • 使用者が支払い方法を選択したかどうかを確認することができます。たとえば、値が空の場合、使用者は支払い方法の選択を忘れている可能性があります。その場合、検証ルールを使用してフィールドに「無効」のマークを付けることができます。
于 2013-03-26T20:19:08.480 に答える