目前我编写的插件似乎是随机工作的。有些人工作,有些人不工作,有些工作部分时间工作,而且没有明显的模式。即使所有相同的内容都以相同的方式编写和注册(显然)。而且我找不到关于将插件放在何处以及如何在application.ini中注册它们的正确文档,因此我需要依赖我在BLOG或此处找到的示例。并且很可能这些例子中的一些假设在我的代码中可能不正确。
所以我只举一个简单的例子,如果你可以建议如何使它工作,并提供关于ZF插件的好文章的链接,我非常感谢......
以下是我目前的工作方式:
目录结构:
/library
/Zend
/Plugins
Myplugin.php
/applications
/myApp
/configs
application.ini
/modules
/default
/controllers
/configs
/views, etc
/admin
/controllers
/configs
/views, etc
Bootstrap.php
/public_html
index.php
Myplugin.php包含一个类:
Class Plugins_Myplugin extends Zend_Controller_Plugin_Abstract
{
public function init()
{
print 'If I can see this, it's finally working!';
}
}
app.ini相关的东西看起来像这样:
includePaths.library = APPLICATION_PATH "/../../library"
bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
pluginpaths.plugins = "Plugins"
resources.myplugin =
resources.frontController.plugins.myplugin = Plugins_Myplugin
;//I assume Plugins_Myplugin should be resolved into library/Plugins/Myplugin.php with class Plugins_Myplugin inside, given present configuration. Most likely I am wrong somewhere
最常见的错误通常是:
致命错误:第117行的/whatever/nevermind/domains/mydomain/library/Zend/Application/Resource/Frontcontroller.php中找不到类'Plugins_Myplugin'
如果我只用 resources.myplugin = “注册”它,忽略整个* resources.frontController.plugins.myplugin = Plugins_Myplugin *行,有时会找到 。
显然,这不是注册插件的正确方法。这种方式有什么问题,以及什么是好方法(使用application.ini)?
答案 0 :(得分:11)
你应该知道你的自定义命名空间是“插件”和 考虑将这些行添加到您的配置中:
includePaths.library = APPLICATION_PATH "/../library"
autoloaderNamespaces[] = "Plugins"
resources.frontController.plugins[] = "Plugins_Myplugin"
并确保删除这些:
includePaths.library = APPLICATION_PATH "/../../library"
pluginpaths.plugins = "Plugins"
resources.myplugin =
resources.frontController.plugins.myplugin = Plugins_Myplugin
答案 1 :(得分:0)
除非我改变,否则上述方法对我不起作用:
autoloaderNamespaces[] = "Plugins"
到
autoloadernamespaces[] = "Plugins"
我的目录结构是Zend的默认值。我的操作系统是Windows 7专业版。我正在使用WAMP ...... 希望它有所帮助,因为我不能(或不知道如何)评论上面的答案。
答案 2 :(得分:0)
对你来说最好的方法就是创造这样的东西:
-applications
+controllers
+layouts
+models
-plugins
**Myplugin.php**
+views
在application.ini中:
includePaths.plugins = APPLICATION_PATH "/plugins"
我怎么称呼这个插件.... 简单的方法,只需要这个:
public function indexAction()
{
$Myplugin = new Myplugin();
}