【发布时间】:2015-10-29 11:42:23
【问题描述】:
在我的 form.ctp 中,我有一些以点表示法命名的输入,因此它们在 POST 上连接到 $this->request->data 内的同一数组。
问题是我无法为它创建一个Modelless form,因为它不会将点符号映射到数组,并在请求-> 数据中逐字搜索consumer.name 之类的字段。有什么办法可以通过简单的$form->execute() 来验证这些数据吗?
我的 Cake 版本是 3.1.1
代码:
//Form Class
protected function _buildSchema(Schema $schema)
{
return $schema->addField('consumer.name', 'string')
->addField('consumer.card_number', ['type' => 'string'])
->addField('consumer.expire_month', ['type' => 'string'])
->addField('consumer.expire_year', ['type' => 'string'])
->addField('type', ['type' => 'string'])
->addField('consumer.cvv', ['type' => 'string']);
}
protected function _buildValidator(Validator $validator)
{
return $validator->add('consumer.name', 'length', [
'rule' => ['minLength', 3],
'message' => 'Consumer name too short',
])
->requirePresence('type', true)
->requirePresence('consumer.name', true)
->requirePresence('consumer.card_number', true)
->requirePresence('consumer.expire_month', true)
->requirePresence('consumer.expire_year', true)
->requirePresence('consumer.cvv', true)
->add('consumer.card_number', 'validFormat', [
'rule' => array('custom', '/[0-9]{16}/'),
'message' => 'A valid card number is required',
])
->add('consumer.expire_month', 'validFormat', [
'rule' => array('custom', '/[01]?[0-9]/'),
'message' => 'A valid expire month is required',
])
->add('consumer.expire_year', 'validFormat', [
'rule' => array('custom', '/[0-9]{2}/'),
'message' => 'A valid expire year is required',
])
->add('consumer.cvv', 'validFormat', [
'rule' => array('custom', '/[0-9]{3}/'),
'message' => 'A valid CVV is required',
]);
}
我的视图有几个这样的输入:
<?php echo $this->Form->input('consumer.name', [
'label' => false,
'class' => 'form-control inputbox_user',
'pattern' => "^[a-zA-ZàáâäãåąčćęèéêëėįìíîïłńòóôöõøùúûüųūÿýżźñçčšžÀÁÂÄÃÅĄĆČĖĘÈÉÊËÌÍÎÏĮŁŃÒÓÔÖÕØÙÚÛÜŲŪŸÝŻŹÑßÇŒÆČŠŽ∂ð ,.'-]+$",
'required' => true,
'title' => 'Introduce el nombre del titular de la tarjeta.',
]);
?>
还有我的控制器逻辑:
$form = new PaymentForm;
if ($this->request->is(['patch', 'post', 'put'])){
if( $form->execute($this->request->data) ){
//ok
}
}
}
【问题讨论】:
标签: php forms validation cakephp cakephp-3.0