我想知道如何分別處理用戶和會員在所有註冊用戶都視爲用戶,誰擁有一批用戶應用的應用,被認爲是成員 。其他用戶是嘉賓。Zend框架 - 處理與用戶和會員
基本上,一個簡單的用戶可以找到一個團隊,接受團隊請求等的成員都可以看到他的團隊的個人資料,看到其他成員,並做了很多相對於成員和他的團隊更多的事情。
目前,用戶,成員和團隊在三個不同的類中處理,它們都代表它們的數據庫表結構。
所以,我在我的數據庫3個表如下:
我有例如這個類來表示用戶:
class Lib_Model_Users_User implements Zend_Auth_Adapter_Interface, Zend_Acl_Role_Interface
{
protected $_gateway;
protected $_roleId;
protected $_member = null;
protected $_team = null;
protected $_data = array(
'user_id' => null,
'email' => null,
'password' => null,
'first_name' => null,
'last_name' => null,
'gender' => null,
'address' => null,
'city' => null,
'country' => null,
'postal_code' => null,
'phone_mobile' => null,
'phone_home' => null,
'date_of_birth' => null,
'occupation' => null,
'active' => false,
'created_on' => null,
'last_login' => null,
'last_update' => null);
public function __construct($data, $gateway)
{
$this->setGateway($gateway);
$this->populate($data);
if (!isset($this->user_id)) {
if (!isset($this->email)) {
if (!isset($this->first_name, $this->last_name))
throw new Lib_Exception('Initial data must contain an email or a user id or a pair firstname/lastname');
}
}
}
public function setMember($data)
{
$gateway = new Lib_Model_Teams_Gateway();
$this->_member = $gateway->createMember($data);
}
public function getMember($status = 'active')
{
if (null === $this->getTeam()) {
return null;
}
if (null === $this->_member) {
$this->_member = $this->getTeam()->getMember($this->user_id);
}
if (is_string($status)) {
$status = array($status);
}
foreach ($status as $state) {
if ($this->_member->status == $state) {
return $this->_member;
}
}
return null;
}
public function getTeam($active = true)
{
if ($this->_team === null) {
$this->_team = $this->getGateway()->fetchTeam($this->user_id, $active);
}
return $this->_team;
}
public function save()
{
$gateway = $this->getGateway();
$dbTable = $gateway->getDbTable();
$row = $dbTable->find($this->user_id)->current();
if ($row) {
foreach ($this->_data as $key => $value) {
$row->$key = $value;
}
return $row->save();
}
$this->user_id = $dbTable->insert($this->_data);
return $this->user_id;
}
public function getRoleId()
{
if (null === $this->_roleId)
$this->_roleId = $this->user_id;
return $this->_roleId;
}
..........
// etc.
..........
}
正如你所看到的,這個類是非常「堅持」我的數據庫領域,我不知道這是否是最好的方式來做到這一點。
我的會員模式基本一樣,只不過它代表的「team_users」表中,並沒有設置/ getMembers方法,但具有相對於成員的方法。
現在,你明白管理這樣的事情有多難,每次我想要一個成員,我需要檢查一個用戶是否有團隊,如果是的話,我使用getMember()
等創建一個成員實例
從會員方面來說,很難得到關於會員的信息,例如他的first_name
,我總是需要檢查user_id
,創建一個用戶實例並獲得他的first_name
。
我該如何處理這種事情?我在想也許我的會員模式應該擴展用戶模式,因爲成員也是用戶?這是個好主意嗎?你會怎麼做?
謝謝。
無關 - 您創建的建模軟件的截圖與? – 2012-03-27 17:10:37
MySQL Workbench;) – 2012-03-27 17:23:04
好啊,從來沒有嘗試過。現在下載。謝謝! – 2012-03-27 17:31:08