具有默认域的输入助手电子邮件字段


InputHelper email field with default domain

我有一个简单的页面,只有一个输入字段,用户在其中输入他们的电子邮件地址以便预先注册。但是页面布局的设计使用户只插入其电子邮件的左侧部分。(我们只接受具有特定电子邮件域的用户)。

因此,页面布局(电子邮件输入部分)如下所示:

[输入框] @ defaultdomain.com

问题是:我创建了一个名为预注册的模型,映射到数据库上的相应表。到目前为止,我唯一存储在那里的是插入的电子邮件。所以在模型的验证器中,我有这段代码:

public $validate = array(
    'email' => array(
        'required' => array(
            'rule' => array('notEmpty'),
            'message' => 'Email field cannot be empty'
        ),
        'email' => array(
            'rule' => array('email'),
            'message' => 'The email is not valid.'
        )   
    )
);

在观点中:

echo $this->Form->input('email', array(
        'class' => 'input_box',
        'value' => $input_box_default_text,
        'id' => 'email',
        'label' => false,
        'div' => false
    ));

问题在于验证器正在验证文本字段,期望用户插入带有域的常规电子邮件(当然是 duh)。为了 cakephp 将文本字段与默认域一起验证,我该怎么做?

要么按照@cske的建议修改数据(但修改Controller::$request::$dataModel::$data而不是$_POST),即在保存/验证之前将域部分附加到用户输入中,并因此将完整的电子邮件地址存储在数据库中,或者使用仅将域部分用于验证目的的自定义验证规则, 像这样:

App::uses('Validation', 'Utility');
...
public $validate = array(
    'email' => array(
        'required' => array(
            'rule' => array('notEmpty'),
            'message' => 'Email field cannot be empty'
        ),
        'email' => array(
            'rule' => array('validatePreRegistrationEmail'),
            'message' => 'The email is not valid.'
        )   
    )
);
...
public function validatePreRegistrationEmail($data)
{
    $email = current(array_values($data)) . '@defaultdomain.com';
    return Validation::email($email);
}