我有一个身份验证插件在工作。根据上的精彩视频系列,我正在尝试添加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')。也就是说,从长远来看,最好使用插件,而不是把这种东西放在引导程序中。这些教程很好:)