你如何在application.ini中注册Zend Framework插件?

时间:2011-03-30 13:24:23

标签: php zend-framework plugins

目前我编写的插件似乎是随机工作的。有些人工作,有些人不工作,有些工作部分时间工作,而且没有明显的模式。即使所有相同的内容都以相同的方式编写和注册(显然)。而且我找不到关于将插件放在何处以及如何在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)?

3 个答案:

答案 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();
}