MVC(ZF)

use*_*337 0 php zend-framework

我不知道它是如何工作的.我有一个数据库表user和一个模型User:

<?php
class User extends Zend_Db_Table_Abstract {
    protected $_name = 'users';
}
Run Code Online (Sandbox Code Playgroud)

在控制器中我称之为:$user = new User() 但我如何获得所有用户或id为1的用户?

Rob*_*len 8

Zend_Db_Table实现表网关模式,关联Zend_Db_Table_Row实现行数据网关模式.

这意味着,由于表类表示数据库表,因此使用复数类名称更有意义.同样,应该为行类使用单数类名.

因此你最终得到这样的东西:

class Model_Users extends Zend_Db_Table_Abstract
{
    protected $_name = 'users';           // database table name
    protected $_rowClass = 'Model_User';  // row class name

    public function fetchAllInLastNameOrder()
    {
        return $this->fetchAll(null, array('last_name', 'first_name'));
    }

    public function fetchUserById($id)
    {
        return $this->_fetchRow('id = '. (int)$id);
    }
}

class Model_User extends Zend_Db_Table_Row_Abstract
{
    public function getFullName()
    {
        return trim($this->title . ' ' 
                . $this->first_name . ' ' 
                . $this->last_name);
    }
}
Run Code Online (Sandbox Code Playgroud)

创建自己的类的关键是您可以添加自己的控制器和视图可以使用的方法.你应该永远不会使用Zend_Db_Table比你的模型类直接的其他方法.这是因为该模型设计与数据库实现紧密耦合.随着时间的推移,您可能会发现这不够灵活,并且想要使用不同的系统.如果您确保应用程序的其余部分只访问在其中创建的方法Model_Users,Model_User那么您应该能够重新实现模型而不会破坏应用程序的其余部分...

对于较大的应用程序和具有复杂业务逻辑的应用程序,模型很少是单个数据库表上的简单包装器.为了获得更好的灵活性和可维护性,您可以考虑创建简单类的模型,然后使用从模型映射到数据库的映射器类.Matthew Weier O'Phinney在他的建筑构建模型中探讨了这一点,我强烈建议这样做.

此外,有关如何在控制器中使用模型的想法,快速入门我的教程是很好的起点.