我正在查询数据库记录以检查用户名是否已存在:
$q = Doctrine_Query::create()
->from('Tcc_Model_User u')
->where('u.Username = ?', $input['Username']);
$object = $q->fetchOne();
if(is_object($object)) {
// not sure what to do here
} else {
// ok to record
我无法让它工作的是如何在提交表单的用户名字段旁边显示用户名已被占用的消息。可以请任何人帮助我吗?非常感谢任何帮助。谢谢
编辑:
感谢 Drew010 我通过添加解决了上述问题:
$form->getElement('Username')->addError('Sorry, that username is already taken!');
在条件语句的第一个。再次感谢 drew010。
最佳答案
因为您使用的是 Zend_Form,所以有一个验证器可以为您做这件事。
参见 Zend_Validate_DbNoRecordExists
他们给出了一个验证数据库中不存在给定用户名的示例。
这是我的一个应用程序的示例,第三个验证器检查用户名是否不存在:
$this->addElement('text', 'username', array(
'label' => 'User Name:',
'required' => true,
'validators' => array('NotEmpty'),
'decorators' => $this->elementDecorators,
'validators' => array(
array('StringLength', true, array('min' => 4,
'messages' => array(
Zend_Validate_StringLength::TOO_SHORT =>
'Account username must be at least %min% characters'
)
)),
array('Regex', true, array('pattern' => '/^\w(?:[\w\d\.\-_]+)(?:\w|\d)$/',
'messages' => array(
Zend_Validate_Regex::NOT_MATCH =>
"The username contained invalid characters"
)
)),
array('Db_NoRecordExists', true, array(
'table' => 'accounts', 'field' => 'username',
'messages' => array(
Zend_Validate_Db_NoRecordExists::ERROR_RECORD_FOUND =>
"An account with the username '%value%' is already registered"
)
))
)
));
另外,为了将来的引用,如果你做扩展验证你不能用验证器做,你可以像这样向特定的表单元素添加错误:
if ($something_was_wrong) {
$form->getElement('username')
->addError('Username already exists!');
}
关于database - 使用 Zend 和 doctrine 在数据库中查询现有用户名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8014011/