如何在zend框架中访问Controller中的模型?

时间:2013-04-27 12:24:33

标签: zend-framework

我试图从控制器调用模型方法。但是我收到致命错误:找不到类'GuestModel'。错误

以下是代码::

Controller ::

class GuestController extends Zend_Controller_Action
 {

     public function indexAction(){
        $guestbook = new GuestModel();
        $this->view->entries = $guestbook->fetchAll();
     }
 }

型号::

class GuestModel extends Zend_Db_Table_Abstract
 {
 public function fetchAll()
    {
        $resultSet = $this->getDbTable()->fetchAll();
        $entries   = array();
        foreach ($resultSet as $row) {
            $entry = new Application_Model_Guestbook();
            $entry->setId($row->id)
                  ->setEmail($row->email)
                  ->setComment($row->comment)
                  ->setCreated($row->created);
            $entries[] = $entry;
        }
        return $entries;
    }


    public function getDbTable()
    {
        if (null === $this->_dbTable) {
            $this->setDbTable('Application_Model_DbTable_Guestbook');
        }
        return $this->_dbTable;
    }


 public function setDbTable($dbTable)
    {
        if (is_string($dbTable)) {
            $dbTable = new $dbTable();
        }
        if (!$dbTable instanceof Zend_Db_Table_Abstract) {
            throw new Exception('Invalid table data gateway provided');
        }
        $this->_dbTable = $dbTable;
        return $this;
    }
 }

1 个答案:

答案 0 :(得分:1)

Zend Framework自动加载依赖于使用正确的目录结构和文件命名约定来自动查找类 ,从代码的外观来看,我猜你不会遵循它。

我为您的问题找到了两种可能的解决方案:

  1. 如果可能,请将您的课程重命名为 Application_Model_Guestbook ,将文件重命名为 Guestbook.php ,并确保将其移至 application / models / 目录。然后你只需要在控制器中将其称为 $ guestbook = new Application_Model_Guestbook(); 。检查此documentation example;
  2. 创建您自己的其他自动加载规则。查看有关Resource Autoloading的官方文档。