-1

私は for を使用MVCASP.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);

私はこれをすべて試しました。クラスを含める科学を理解できれば、そこから理解できます。

私が得るエラーは常に Class 'blah' not found in blah on line x です

4

2 に答える 2

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' WITH AN S であることに注意してください!! そこで、YourClassNameHere.php ファイルを application/plugins に配置すると、すべてが機能するようになりました。

于 2013-06-02T12:50:24.790 に答える
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 に答える