2013-06-01 104 views
-1

我使用MVCASP.NET和它的分配比這更簡單。 我想要做的就是在項目中包含一個控制器plugin你如何包括一個控制器插件(Zend框架)

我在session.php文件中定義的類:

class session extends Zend_Controller_Plugin_Abstract{ 
     //Code 
    } 

文件結構看起來像這樣
/應用
 /CONFIGS
  /控制器
    /插件
      /session.php
  /佈局
  /型號
  /視圖

我已經爬在網上,沒有人提供了關於如何做到這一點簡單的explination。 我試過的東西:

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

+0

你的application.ini中有什麼自動加載器相關嗎? –

+0

否自動裝載機的東西:phpSettings.display_startup_errors = 1個 phpSettings.display_errors = 1 includePaths.library = APPLICATION_PATH 「/../library」 bootstrap.path = APPLICATION_PATH 「/Bootstrap.php」 bootstrap.class = 「自舉」 appnamespace = 「應用程序」 resources.frontController.controllerDirectory = APPLICATION_PATH 「/控制器」 resources.frontController.params.displayExceptions = 1 resources.view [] = resources.layout.layoutPath = APPLICATION_PATH 「/佈局/腳本/」 – user2443936

回答

0

的問題是,你聲明類session,但隨後試圖實例使用一些其他的該類類名稱。它看起來像你按照標準的資源自動加載文件結構,因爲你已經宣佈Application的appnamespace,插件類應該被聲明爲:

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()); 

(既因爲他們做同樣的事情不要做)。

+0

感謝您的回覆。我嘗試了你的建議,我仍然得到致命的錯誤:Class'Application_Plugin_Session'找不到..... \ Zend \ Application \ Resource \ Frontcontroller.php在117行。我的問題是,我在哪裏把Session.php文件它包括在內?我試過應用程序/控制器/插件,應用程序/插件,和應用程序/../庫/插件。後來因爲ini文件有這個:includePaths.library = APPLICATION_PATH「/../library」。 – user2443936

+1

該文件應該在'application/plugins/Session.php'上 - 你能試試嗎? –

0

Holy Crap!我想到了。 我在這裏找到答案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文件。該文件不在您的項目中。該文件已經定義了你放置插件的位置。 (Amoung其他的東西)。所以我發現這個:

public function initDefaultResourceTypes() 
    { 
     $basePath = $this->getBasePath(); 
     $this->addResourceTypes(array(
      ........ 
      , 
      'model' => array(
       'namespace' => 'Model', 
       'path'  => 'models', 
      ), 
      'plugin' => array(
       'namespace' => 'Plugin', 
       'path'  => 'plugins', 
      ), 
      ....... 
      , 
     )); 
     $this->setDefaultResourceType('model'); 
    } 

請注意,插件名稱空間是'插件',路徑是'插件'WITH AN S!所以我把YourClassNameHere.php文件放在應用程序/插件中,現在一切正常。