Пользовательское событие отправки 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>

Теперь мои файлы модулей

config.xml

<?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 выполнения моего эхо-заявления наблюдателя)

In index controller --after dispatch

Но это должно было напечатать Hi i am inside event текст тоже написан в обозревателе.

введите описание изображения здесь

2

Решение

Пара проблем:

1) Измените структуру файла инициализации xml на First Letter CAPS.

# 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 пространство имен модели. Добавьте это к вашему config.xml в <global> блок:

# 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, он будет работать нормально. Например:

# File: app/code/local/MyCompanyName/HelloWorld/Model/Observer.php:
<?php
class MyCompanyName_HelloWorld_Model_Observer
{
public function my_custom_method($observer)
{
var_dump('Hello World');
exit;
}
}

Выход: In index controllerstring(11) "Hello World"

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]