可能的原因导致自动加载在Zend Framework 1.10.2中不起作用?

时间:2010-03-10 00:10:52

标签: zend-framework

我正在使用Zend Framework 1.10.2编写应用程序。

我创建了几个模型类和一个控制器来处理它们。

当我执行我的应用程序并访问管理控制器时。我看到了这个错误。

致命错误:第16行的C:\ xampp \ htdocs \ bidpopo \ application \ controllers \ AdminController.php中找不到类'Application_Model_DbTable_Users'

错误清楚地显示了自动加载错误。

因此我在bootstrap文件中编写了这段代码。

    protected function initAutoload()
{
    $modeLoader = new Zend_Application_Module_AutoLoader(array
        ('namespace'=>'','basePath'=>APPLICATION_PATH ));
    //echo(APPLICATION_PATH);
    return $modeLoader;
}

仍然存在错误:(。任何人都可以建议我在这里错过了什么吗?

这是Model Users类的位置。

C:\ XAMPP \ htdocs中\ bidpopo \应用\模型\ DBTABLE \ Users.php

这是它的代码。

    class Application_Model_DbTable_Users extends Zend_Db_Table_Abstract
{
    //put your code here
protected $_name='users';

public function getUser($id)
{
    $id = (int)$id;
    $row = $this->fetchrow('id='.$id);
    if(!$row)
    {throw new Exception("Could not find row id - $id");}
    return $row->toArray();   
}

public function addUser($userDetailArray)
{
    $this->insert($userDetailsArray);
}

public function updateUser($id,$userDetailArray)
{
    $this->update($userDetailArray,'id='.(int)$id);
}

public function deleteUser($id)
{
    $this->delete('id='. (int)$id);
}

}

这是管理员控制器的代码

class AdminController extends Zend_Controller_Action
{

    public function init()
    {
        /* Initialize action controller here */
    }

    public function indexAction()
    {
        $this->view->title= "All Users";
        $this->view->headTitle($this->view->title);

        $users = new Application_Model_DbTable_Users();
        $this->view->users = $users->fetchAll();
    }

    public function addUserAction()
    {
        // action body
    }

    public function editUserAction()
    {
        // action body
    }

    public function deleteUserAction()
    {
        // action body
    }

1 个答案:

答案 0 :(得分:1)

您的应用程序类不遵循您设置的命名空间的正确命名约定。 Zend_Application_Module_AutoLoader与普通自动加载器略有不同,因为它不会简单地用'/'更改类名中的'_'。它查看类名的第二部分,然后根据该文件夹检查文件夹是否存在。

您需要更改一行:

$modeLoader = new   Zend_Application_Module_AutoLoader(array(
    'namespace'=>'Application',
    'basePath'=>APPLICATION_PATH
));

这意味着它将自动加载前缀为“Application_”的所有模块类。当它的第二部分是'Model_'时,它将在类的“{$ basePath} / models”中查找。其余类名中的“_”将替换为“/”。因此该文件的文件路径为“{$ basePath} /models/DbTable/Users.php”。

了解更多here