0

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

我的问题是,当我尝试在 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

4

4 回答 4

1

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

您应该改用控制器插件。

于 2012-09-10T15:33:50.427 回答
1

这是从应用程序命名空间“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);
于 2012-09-10T16:20:41.973 回答
1

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

于 2012-09-10T16:46:39.887 回答
0

如果它在应用程序/模型中,那么我会认为脚本应该是 Models_SystemAcl 而不是 Model_SystemAcl(没有's')。话虽如此,从长远来看,最好使用插件,而不是将这类东西粘在引导程序中。这些教程虽然很好:)

于 2012-09-10T16:15:10.857 回答