2011-07-25 60 views
2

我目前正在試圖鉤到「sales_order_save_after」事件,但我不斷地得到當事件被觸發以下錯誤時:「法師註冊表項已經存在」觸發事件

Mage registry key "_singleton/Modulename/Orderobserver" already exists 

現在的我已經檢查Orderobserver類是否正確命名,並匹配對xml中類的調用,但錯誤仍然存​​在。調用事件的xml看起來是這樣的:

<events> 
    <sales_order_save_after> 
     <observers> 
      <modulename> 
       <type>singleton</type> 
       <class>Modulename/Orderobserver</class> 
       <method>generateOrderFile</method> 
      </modulename> 
     </observers> 
    </sales_order_save_after> 
    </events> 

該類被命名爲Companyname_Modulename_Model_Modulename_Orderobserver

類文件命名,並定位爲這樣:app/code/local/Companyname/Modulename/Model/Modulename/Orderobserver.php

有趣的是,也是在服務器日誌中記錄以下錯誤時出現錯誤:

client denied by server configuration: 
/var/www/vhosts/path/to/subdomain/httpdocs/app/etc/local.xml 

難道這是一個權限問題?

更新:

我已經看過了Magento的系統日誌,也被記錄以下錯誤:

Failed opening 'Mage/Retailpro/Model/Orderobserver.php' for inclusion (include_path='/var/www/path/to/subdomain/httpdocs/app/code/local:/var/www/path/to/subdomain/httpdocs/app/code/community:/var/www/path/to/subdomain/httpdocs/app/code/core:/var/www/path/to/subdomain/httpdocs/lib:.:') in /var/www/path/to/subdomain/httpdocs/lib/Varien/Autoload.php on line 93 
+1

被服務器配置拒絕的客戶端不相關。 Magento有一個內部檢查,它試圖通過HTTP請求local.xml,如果它可以訪問,則出於安全原因保存。 –

回答

9

首先,雖然它可能不是neccesay,改變這種

<class>Modulename/Orderobserver</class> 

<class>modulename/orderobserver</class> 

關於類別別的公約是它們都是小寫。

二,類別名modulename/orderobserver轉化成的

Packagename_Modulename_Model_Orderobserver 

類的名稱,以便您已命名的類文件是錯誤的。最後,由於Magento的自動加載機是基於類的名字,這意味着你的文件需要位於

app/code/local/Packagename/Modulename/Model/Orderobserver.php 
+1

感謝您的幫助。我做了你所建議的所有改變,但我仍然有同樣的結果。查看magento system.log中的錯誤報告,它表示'失敗的開放'Mage/Modulename/Model/Orderobserver.php'。這是否表明它正在查看法師文件夾而不是公司名稱文件夾。這可能是問題的根源嗎? – Geoff

+0

這是正確的。如果您的自定義模塊的config.xml設置爲模型? –

+0

啊,好問題。我目前正在從這個公司的開發者模塊中複製模塊,並且我只複製了我認爲相關的xml中的一些部分。我只是添加了一點xml,現在它工作正常。感謝你的幫助,你是一個拯救生命的人。 – Geoff

0
<global> 
    <models> 
     <newitems> 
      <class>Microtron_Newitems_Model</class> 
      <resourceModel>newitems_mysql4</resourceModel> 
     </newitems> 
     <newitems_mysql4> 
      <class>Microtron_Newitems_Model_Mysql4</class> 
      <entities>   
       <newitems> 
        <table>newitems</table> 
       </newitems> 
      </entities> 
     </newitems_mysql4> 
    </models> 
    <resources> 
     <newitems_setup> 
      <setup> 
       <module>Microtron_Newitems</module> 
      </setup> 
      <connection> 
       <use>core_setup</use> 
      </connection> 
     </newitems_setup> 
     <newitems_write> 
      <connection> 
       <use>core_write</use> 
      </connection> 
     </newitems_write> 
     <newitems_read> 
      <connection> 
       <use>core_read</use> 
      </connection> 
     </newitems_read> 
    </resources> 
    <events>  
     <catalog_product_save_after>  
      <observers>  
       <newitems>  
        <type>singleton</type> 
        <class>newitems/observer</class> 
        <method>catalog_product_save</method> 
       </newitems> 
      </observers> 
     </catalog_product_save_after> 
    </events> 
</global> 
+1

您應該描述部分 –

2

,您會收到此錯誤,如果<事件>裏面<全球>

舉動吧至<前端> <事件>或< adminhtml> <事件> <全局>標記之外以解決問題。

相關問題