在我的项目中,名为 Object_X 的类代表 X 类的单个实例(数据库表中的一行)。
我还必须创建模型来支持这些 Object_X 类。例如:我认为像“isEmailAddressTaken($email)”或“isLogged()”这样的方法(例如对于客户数据库表)应该放在模型(Model_Customer)中,对吗?
现在,如果一个类 Object_X 代表数据库中的一行,而 Model_X 代表一般的 db 表,那么 Model_X 应该是单例吗?
我有点困惑。
在我的项目中,名为 Object_X 的类代表 X 类的单个实例(数据库表中的一行)。
我还必须创建模型来支持这些 Object_X 类。例如:我认为像“isEmailAddressTaken($email)”或“isLogged()”这样的方法(例如对于客户数据库表)应该放在模型(Model_Customer)中,对吗?
现在,如果一个类 Object_X 代表数据库中的一行,而 Model_X 代表一般的 db 表,那么 Model_X 应该是单例吗?
我有点困惑。
这取决于任务。除了数据库访问之外,zend 框架还有更多功能,这可能会对您有所帮助。
具体来说,对于任何类型的验证,您都应该Zend_Validate
根据需要使用和创建验证器。例如,为了检查电子邮件是否已被占用,您应该声明Application_Validate_UserEmail_NotExists
which extends Zend_Validate_Abstract
。那么您将能够在您需要的任何地方使用该验证器类(尤其是在表单中)
<?php
class Application_Validate_UserEmail_NotExists extends Zend_Validate_Abstract
{
const REGISTERED_USER_EMAIL = 'invalid';
const REGISTERED_USER_EMAIL_MESSAGE = 'Email already registered';
protected $_messageTemplates = array(
self::REGISTERED_USER_EMAIL => self::REGISTERED_USER_EMAIL_MESSAGE,
);
public function isValid($value)
{
$modelUsers = new Model_Users();
$user = $modelUsers->fetchRegisteredWithEmail($value);
if (is_object($user)) {
$this->isAlreadyRegisteredError = true;
$this->_error(self::REGISTERED_USER_EMAIL);
return false;
}
return true;
}
}
$validator = new Application_Validate_UserEmail_NotExists();
if ($validator->isValid('email@domain.com')) {
....
}
要检查用户是否登录,您应该使用Zend_Auth
,它提供了各种功能来处理用户身份验证和会话管理。