Php MVC的M(ZF)

Php MVC的M(ZF),php,zend-framework,Php,Zend Framework,我不明白它到底是怎么工作的。 我有一个数据库表user和一个模型user: <?php class User extends Zend_Db_Table_Abstract { protected $_name = 'users'; } 尝试在用户类中创建一个静态方法,该方法返回所有用户的数组。您在寻找什么 还有,Zend_Db_Table!=模型您可以在此处阅读有关MVC M的更多信息: Zend\u Db\u Table实现表网关模式,相关的Zend\u Db\u Ta

我不明白它到底是怎么工作的。 我有一个数据库表
user
和一个模型
user

<?php
class User extends Zend_Db_Table_Abstract {
    protected $_name = 'users';
}

尝试在用户类中创建一个静态方法,该方法返回所有用户的数组。

您在寻找什么

还有,Zend_Db_Table!=模型您可以在此处阅读有关MVC M的更多信息:


Zend\u Db\u Table
实现表网关模式,相关的
Zend\u Db\u Table\u行
实现行数据网关模式

这意味着,由于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);
    }
}
创建自己的类的意义在于,您可以添加自己的方法,然后控制器和视图可以使用这些方法。除了在模型类中,您不应该直接使用
Zend\u Db\u表
方法。这是因为该模型设计与数据库实现紧密耦合。随着时间的推移,您可能会发现这不够灵活,需要使用不同的系统。如果您已确保应用程序的其余部分仅访问在
Model\u用户
Model\u用户
中创建的方法,则您应该能够在不破坏应用程序其余部分的情况下重新实现您的模型

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


此外,对于如何从控制器内部使用模型的想法,or是很好的起点。

Google存储库模式。或者等到有人作答。我现在太困了…谢谢Rob Allen给出的详细而有用的答案!