Zend引导程序如何自动加载模型



我有一个身份验证插件在工作。根据上的精彩视频系列,我正在尝试添加ACLhttp://www.youtube.com/watch?v=b6qsSnLfcmE&feature=relmfu。

我的问题是,当我试图在Bootstrap中注册模型以便将实例传递给插件时,我会收到一个服务器500错误。我的引导程序是这样的。。。

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
protected function _initAutoload()
{
    $modelLoader = new Zend_Application_Module_AutoLoader(array(
        'namespace' => '',
        'basePath'  => APPLICATION_PATH));
    $acl = new Model_SystemAcl;
    $auth = Zend_Auth::getInstance();
    $fc = Zend_Controller_Front::getInstance();
    $fc->registerPlugin(new Plugin_AccessCheck($acl,$auth));
    return $modelLoader;
}
}

这是一条线:

$acl = new Model_SystemAcl;

这就是问题的根源。如果我注释掉它(以及传递的$acl参数),它就可以正常工作。我的系统似乎没有正确配置为加载模型。顺便说一句,这是教程中显示的整个引导程序。也许Application.ini中有我需要的东西?

编辑:是的,SystemAcl.php存在并且在[applicationdir]/models 中

这是来自应用程序命名空间"application"的负载模型的完整示例

$resourceLoader = new Zend_Loader_Autoloader_Resource(
    array(
         'basePath'  => APPLICATION_PATH,
         'namespace' => 'Application',
    )
);
$resourceLoader->addResourceType('model', 'models/', 'Model');
$autoloader = Zend_Loader_Autoloader::getInstance();
$autoloader->pushAutoloader($resourceLoader);

尝试实例化可能尚未加载的资源,这不是一个好做法。

您应该使用控制器插件。

根据您的设置,类的文件名应该是SystemAcl.php,而不是Model_SystemAcl.php

如果它在应用程序/模型中,那么我会认为脚本应该是models_SystemAcl,而不是Model_SystemAcl(no's')。也就是说,从长远来看,最好使用插件,而不是把这种东西放在引导程序中。这些教程很好:)

最新更新