2015-09-04 82 views
2

我試着從this網站相同的代碼。Magento調度自定義事件不起作用

它工作正常,但觀察員的代碼似乎沒有工作。

我的意思是在觀察者方法中,我回顯了一些文字並且也使用了exit()。但控制不會去那裏。我試圖調試很多,但無法獲得解決方案。

在此先感謝。

這是我的模塊的目錄結構的屏幕截圖。

app/etc/MyCompanyName_HelloWorld.xml

<?xml version="1.0"?> 
<config> 
    <modules> 
     <MyCompanyName_HelloWorld> 
      <active>true</active> 
      <codePool>local</codePool> 
     </MyCompanyName_HelloWorld> 
    </modules> 
</config> 

現在我的模塊文件

​​3210

<?xml version="1.0"?> 
<config> 
    <modules> 
     <mycompanyname_helloworld> 
      <version> 
       0.1.0 
      </version> 
     </mycompanyname_helloworld> 
    </modules> 
    <frontend> 
     <routers> 
      <!-- the <helloworld> tagname appears to be arbitrary, but by 
      convention is should match the frontName tag below--> 
      <helloworld> 
       <use>standard</use> 
       <args> 
        <module>MyCompanyName_HelloWorld</module> 
        <frontName>helloworld</frontName> 
       </args> 
      </helloworld> 
     </routers> 
    </frontend> 
    <!--Custom events--> 
    <global> 
     <events> 
      <my_custom_event> 
       <observers> 
        <mycompanyname_helloworld_my_custom_event_observer> 
         <type>singleton</type> 
         <class>helloworld/observer</class> 
         <method>my_custom_method</method> 
        </mycompanyname_helloworld_my_custom_event_observer> 
       </observers> 
      </my_custom_event> 
     </events> 
    </global> 
    <!--//Custom events--> 
</config> 

Observer.php

<?php 
/** 
* Created by PhpStorm. 
* User: pratik 
* Date: 9/4/15 
* Time: 7:45 AM 
*/ 
class MyCompanyName_HelloWorld_Model_Observer{ 
    public function my_custom_method($observer){ 
     $eventName = $observer->getEvent(); 
     echo "Hi i am inside event".$eventName; exit; 
    } 
} 

IndexController.php

<?php 
/** 
* Created by PhpStorm. 
* User: pratik 
* Date: 9/4/15 
* Time: 7:32 AM 
*/ 
class MyCompanyName_HelloWorld_IndexController extends Mage_Core_Controller_Front_Action{ 
    public function indexAction(){ 
     echo "In index controller"; 
     //Now dispatching event(Sending off the event) 
     $arrToObservers = array('cid'=>'123'); 
     Mage::dispatchEvent('my_custom_event',$arrToObservers); 
     ////Now dispatching event(Sending off the event) 
     echo "after dispatch"; 
    } 
} 

和輸出我得到(無Magento的執行我的觀察員echo語句)

In index controller --after dispatch

但它應該打印過寫在觀察者Hi i am inside event文本。

enter image description here

+0

你的模塊名稱應區分大小寫,即'MyCompanyName_HelloWorld',而不是在你的config.xml –

+0

也全部小寫的應用程序的/ etc/XML文件應該是'應用/ etc/modules/MyCompanyName_HelloWorld.xml' –

+0

Robbie先生:)我跟隨了一些來自hello world模塊的部分。 http://stackoverflow.com/questions/576908/how-to-create-a-simple-hello-world-module-in-magento。你不能懷疑阿蘭風暴的解決方案!看看那裏!:) –

回答

2

兩個問題:

1)改變你的初始化xml文件結構,以首字母大寫。

# File: app/etc/modules/MyCompanyName_HelloWorld.xml 
<?xml version="1.0"?> 
<config> 
    <modules> 
     <MyCompanyName_HelloWorld> 
      <active>true</active> 
      <codePool>local</codePool> 
     </MyCompanyName_HelloWorld> 
    </modules> 
</config> 

2)你引用helloworld/observer作爲模型在您的自定義事件的電話,但還沒有定義helloworld模型命名空間。在<global>塊添加到您的​​3210:

# File: app/code/local/MyCompanyName/HelloWorld/etc/config.xml: 
<global> 
    ........Your code ............... 
    <models> 
     <helloworld> 
      <class>MyCompanyName_HelloWorld_Model</class> 
     </helloworld> 
    </models> 
    ........Your code ............... 
</global> 

這樣做,現在運行正常(Recoverable Error: Object of class Varien_Event could not be converted to string in /path/to/mage/app/code/local/MyCompanyName/HelloWorld/Model/Observer.php on line 11)。如果將觀察者方法更改爲僅輸出Hello World,則它工作正常。例如:

輸出:In index controllerstring(11) "Hello World"

+0

嗯,當我到家的時候我會試試看! +1提前:) –

+0

'1)您的應用程序/ etc中的XML文件應該是應用程序/ etc/modules:'好友來吧,這只是一個錯字。我已經在'app/etc/modules'中擁有了它。如果你正確地閱讀了這個問題,我說:除調度員之外,我已經得到了部分擴展工作。手段擴展正在工作。如果xml文件不在應用程序/ etc/modules中,擴展根本就不會起作用。 –

+0

感謝它的工作像魅力 –