CakePHP如何提交NULL值?

时间:2013-03-26 18:57:08

标签: cakephp null

在网络表单上,我有select-option字段。它必须提交值'card'(不带引号)或NULL值。

现在,代码如下所示:

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

如果选择了Invoice选项,我如何定义options数组,在数据库表中提交NULL值(和/或'card',但当然有效)?

提前谢谢!

1 个答案:

答案 0 :(得分:4)

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

要通过表单发送空值,可以使用空字符串。要强制在数据库中插入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),不知道您的应用程序内部工作的人将不得不浏览源代码以找出
  • 可以检查用户是否选择了付款方式;例如如果该值为空,则使用可能忘记选择付款方式,在这种情况下,您可以通过验证规则将字段标记为“无效”。