-1

我使用MVCforASP.NET并且它的分配比这更简单。我想做的就是plugin在项目中包含一个控制器。

我在 session.php 中定义了一个类:

   class session extends Zend_Controller_Plugin_Abstract{
        //Code
    }

文件结构如下
/application
 /configs
 /controllers
  /plugins
   /session.php
 /layouts
 /models
 /views

我已经爬过网络,没有人提供关于如何做到这一点的简单解释。我尝试过的:

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'

4

2 回答 2

0

问题是您正在声明 class session,然后尝试使用许多其他类名来实例化该类。看起来您正在遵循标准资源自动加载器文件结构,并且由于您已声明 的 appnamespace Application,因此您的插件类应声明为:

class Application_Plugin_Session extends Zend_Controller_Plugin_Abstract
{
    ...
}

(区分大小写)。它的文件名必须是Session.php(大写的 S)。然后它应该被正确地自动加载。

然后你只需要将插件注册到前端控制器。您可以在 application.ini 中执行此操作:

resources.frontController.plugins[]  = "Application_Plugin_Session"

或在引导类中:

$front = Zend_Controller_Front::getInstance();
$front->registerPlugin(new Application_Plugin_Session());

(不要两者都做,因为他们做同样的事情)。

于 2013-06-01T20:51:05.877 回答
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”,路径是“plugins”,带有 AN S!!所以我将 YourClassNameHere.php 文件放在 application/plugins 中,现在一切正常!

于 2013-06-02T12:50:24.790 回答