Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Zend Framework-处理具有用户和成员的应用程序_Php_Model View Controller_Zend Framework_Model - Fatal编程技术网

Php Zend Framework-处理具有用户和成员的应用程序

Php Zend Framework-处理具有用户和成员的应用程序,php,model-view-controller,zend-framework,model,Php,Model View Controller,Zend Framework,Model,我想知道如何在一个应用程序中分别处理用户和成员,其中所有注册用户都被视为用户,拥有团队的用户被视为成员。其他用户是来宾 基本上,一个简单的用户可以找到一个团队,接收一个团队请求,等等。一个成员可以看到他的团队档案,看到其他成员,并做很多与成员和他的团队相关的事情 目前,用户、成员和团队被分为三个不同的类,它们都表示它们的数据库表结构 因此,我的数据库中有3个表,如下所示: 例如,我有一个代表用户的类: class Lib_Model_Users_User implements Zend_Aut

我想知道如何在一个应用程序中分别处理用户和成员,其中所有注册用户都被视为用户,拥有团队的用户被视为成员。其他用户是来宾

基本上,一个简单的用户可以找到一个团队,接收一个团队请求,等等。一个成员可以看到他的团队档案,看到其他成员,并做很多与成员和他的团队相关的事情

目前,用户、成员和团队被分为三个不同的类,它们都表示它们的数据库表结构

因此,我的数据库中有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”表,它没有set/getMembers方法,但有相对于成员的方法

现在,您知道管理这样的事情有多难了,每次我想要获得一个成员时,我都需要检查一个用户是否有团队,如果有,我使用
getMember()
等创建一个成员实例

从成员方面,很难获得有关成员的信息,例如他的
名字
,我总是需要检查
用户id
,创建一个用户实例并获取他的
名字

我怎么处理这种事情?我在想也许我的成员模型应该扩展用户模型,因为成员也是用户?这是个好主意吗?你会怎么做


谢谢。

无论数据库的结构如何,都要按照事物的方式进行建模,这在大多数情况下都是最有效的

  • 由于成员是某种类型的用户,因此成员类应该扩展用户类
  • 只有成员类应该有一个方法getTeam(),因为只有成员才有团队,而普通用户没有
我不认为真的有一个很好的解决办法来处理你的确切情况。但是像这样的怎么样

$user = new User($data, $gateway);
if ($user->hasTeam()) {
    $user = Member::fromUser($user); // returns a new instance of 'Member'
}

无论数据库是如何构造的,都要按照事物的方式对其进行建模,这在大多数情况下都是最有效的

  • 由于成员是某种类型的用户,因此成员类应该扩展用户类
  • 只有成员类应该有一个方法getTeam(),因为只有成员才有团队,而普通用户没有
我不认为真的有一个很好的解决办法来处理你的确切情况。但是像这样的怎么样

$user = new User($data, $gateway);
if ($user->hasTeam()) {
    $user = Member::fromUser($user); // returns a new instance of 'Member'
}

不相关——你用什么建模软件创建了这个截图?啊,很好,从来没有试过。现在下载。谢谢不相关——你用什么建模软件创建了这个截图?啊,很好,从来没有试过。现在下载。谢谢谢谢,不过我还有一个问题。如何以及在何处确定应该实例化哪个类?我应该使用一个工厂,根据用户或成员的状态(是否在teamusers表中)创建用户或成员吗?这就是我想用我的示例说明的:我将始终创建一个用户实例,然后检查该用户是否有团队,如果有,将该用户实例转换为成员实例。感谢您的解释!!谢谢,不过我还有一个问题。如何以及在何处确定应该实例化哪个类?我应该使用一个工厂,根据用户或成员的状态(是否在teamusers表中)创建用户或成员吗?这就是我想用我的示例说明的:我将始终创建一个用户实例,然后检查该用户是否有团队,如果有,将该用户实例转换为成员实例。感谢您的解释!!