4

在网络表单上,我有选择选项字段。它必须提交值“卡”(不带引号)或 NULL 值。

现在,代码如下所示:

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

如果选择了 Invoice 选项,我如何定义选项数组,以在数据库表(和/或“卡”,但这当然可以)中提交 NULL 值?

先感谢您!

4

1 回答 1

4

NULL 是关联数组的无效键。只有“整数”和“字符串”是有效的数组键,请参阅文档:数组

要通过表单发送空值,您可以使用空字符串。要强制在数据库中插入 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 回答