CakePHP 3无模型表格,带虚线字段

时间:2015-10-29 11:42:24

标签: php forms validation cakephp cakephp-3.0

在我的form.ctp中,我有一些以点表示法命名的输入,因此它们在POST上连接到Set-Alias git "git.cmd" 内的同一个数组。

问题在于我无法为其创建Modelless form,因为它不会将点符号映射到数组,并在字面上搜索$this->request->data这样的字段请求 - >数据。我可以用简单的consumer.name来验证这些数据吗?

我的蛋糕版本是3.1.1

代码:

$form->execute()

我的观点有几个输入:

//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.',
                                ]);

                                 ?>

1 个答案:

答案 0 :(得分:0)

点符号将已经变成一个&#34; HTML数组&#34;在视图中。调试您的请求,您将看到['consumer']['name']。这符合框架的预期并且是正确的。 AFAIK没有办法 - 而且不需要。

只需将您的符号更改为下划线:consumer_name例如。使用点是另一个原因也是一个坏主意:如果你需要通过JS或CSS访问它们,你会让自己变得困难。