我将MVC
用于ASP.NET
,并且比这更简单。
我想要做的就是在项目中包含一个控制器plugin
。
我在session.php中定义了一个类:
class session extends Zend_Controller_Plugin_Abstract{
//Code
}
文件结构如下所示
/应用
/ CONFIGS
器/控制器
/插件
/session.php
/布局
/型号
/视图
我已经抓取了网络,没有人提供如何做到这一点的简单探索。 我尝试了什么:
application.ini
resources.frontController.plugins.route = "Application_Controllers_Plugins_Session"
resources.frontController.plugins.route = "Application/Controllers/Plugins/Session"
resources.frontController.plugins[] = "Controllers_Plugins_Session"
resources.frontController.plugins[] = "Controllers/Plugins/Session"
Bootstrap.php :
$front = Zend_Controller_Front::getInstance();
$front->registerPlugin(new Application_Controllers_Plugins_SessionPlugin(), 1);
我尝试了所有这些以及更多。如果我能理解包括课程的科学,我可以从中找到答案。
我得到的错误总是在第x行的blah中找不到Class'blah'
答案 0 :(得分:0)
问题在于您声明了类session
,但后来尝试使用许多其他类名实例化该类。看起来您正在遵循标准资源自动加载器文件结构,并且由于您已声明了Application
的appnamespace,因此您的插件类应声明为:
class Application_Plugin_Session extends Zend_Controller_Plugin_Abstract
{
...
}
(区分大小写)。它的文件名必须是Session.php
(大写S)。然后应该正确自动加载。
然后你只需要在前端控制器上注册插件。您可以在application.ini中执行此操作:
resources.frontController.plugins[] = "Application_Plugin_Session"
或在bootstrap类中:
$front = Zend_Controller_Front::getInstance();
$front->registerPlugin(new Application_Plugin_Session());
(不要同时做两件事。)
答案 1 :(得分:0)
神圣的废话!我想到了。 我在这里找到了答案http://grover.open2space.com/content/autoloading-plugins-zend_application。
好的,我的bootstrap.php(部分)看起来像这样:
protected function _initAutoload()
{
$moduleLoader = new Zend_Application_Module_Autoloader(array(
'namespace' => '',
'basePath' => APPLICATION_PATH));
return $moduleLoader;
}
protected function _initPlugins() {
$front = Zend_Controller_Front::getInstance();
$front->registerPlugin(new Plugin_YourClassNameHere());
}
如果没有_initAutoload(),这绝对是行不通的; 接下来我上课了。命名惯例很大。
class Plugin_YourClassNameHere extends Zend_Controller_Plugin_Abstract
{
//Code
}
此类位于名为YourClassNameHere.php的文件中。现在这就是我被困住的地方。我在哪里放文件?事实证明,我在..... php \ PEAR \ Zend \ Application \ Module中找到了一个Autoloader.php文件。此文件不在您的项目中。此文件已定义插件的放置位置。 (其他的东西)。所以我发现了这个:
public function initDefaultResourceTypes()
{
$basePath = $this->getBasePath();
$this->addResourceTypes(array(
........
,
'model' => array(
'namespace' => 'Model',
'path' => 'models',
),
'plugin' => array(
'namespace' => 'Plugin',
'path' => 'plugins',
),
.......
,
));
$this->setDefaultResourceType('model');
}
请注意,插件命名空间是'Plugin',路径是'插件'WITH AN S !!所以我将YourClassNameHere.php文件放在application / plugins中,现在一切正常!