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

Sej*_*nus 4 php plugins zend-framework

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

Myplugin.php包含一个类:

Class Plugins_Myplugin extends Zend_Controller_Plugin_Abstract
{
     public function init()
     {
          print 'If I can see this, it's finally working!';
     }
}
Run Code Online (Sandbox Code Playgroud)

application.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
Run Code Online (Sandbox Code Playgroud)

最常见的错误通常是:

致命错误:第117行的/whatever/nevermind/domains/mydomain/library/Zend/Application/Resource/Frontcontroller.php中找不到类'Plugins_Myplugin'

有时它,如果我只用"注册"它发现resources.myplugin =,省略了整个*resources.frontController.plugins.myplugin = Plugins_Myplugin*线.

显然,这不是注册插件的正确方法.这种方式有什么问题,以及什么是好方法(使用application.ini)?

taw*_*kov 11

您应该知道您的自定义命名空间是"插件"并考虑将这些行添加到您的配置中:

includePaths.library = APPLICATION_PATH "/../library"
autoloaderNamespaces[] = "Plugins"
resources.frontController.plugins[] = "Plugins_Myplugin"
Run Code Online (Sandbox Code Playgroud)

并确保删除这些:

includePaths.library = APPLICATION_PATH "/../../library"
pluginpaths.plugins = "Plugins"
resources.myplugin =
resources.frontController.plugins.myplugin = Plugins_Myplugin
Run Code Online (Sandbox Code Playgroud)

  • 我建议:autoloaderNamespaces [] ="我的",resources.frontController.plugins.myplugin = My_Plugin_WhatEver,并把它放在/ plugins文件夹中 (3认同)