Here's my code, in Module.php:
public function onBootstrap(MvcEvent $mvcEvent)
{
$sm = $mvcEvent->getApplication()->getServiceManager();
$myServiceEM = $sm->get('MyModule\Service\MyService')->getEventManager();
$myServiceEM->attach(
'myevent.post', ['MyModule\Controller\MyController', 'myFunction']
);
}
And here's myFunction()
in MyModule\Controller\MyController:
public function myFunction(Event $e)
{
$myTestFunc = $this->getMyTestFunc();
}
But when I call getMyTestFunc()
function this error appears:
Fatal error: Uncaught Error: Using $this when not in object context
['MyModule\Controller\MyController', 'myFunction']
is a callable for a static method; therefore you can't use $this
there.
Consider
<?php
class Foo {
protected $prop = 'value';
public function memberMethod() {
return $this->prop;
}
public static function staticMethod() {
return 'static';
}
}
echo Foo::staticMethod(), "
";
// Foo::memberMethod(); // results in Fatal error: Using $this when not in object context
bar( 'myevent.post', array('Foo', 'staticMethod') );
// bar( 'myevent.post', array('Foo', 'memberMethod') ); // // again: Fatal error: Using $this when not in object context
// to call memberFunction() you need an instance to call the method on
$foo = new Foo;
echo $foo->memberMethod(), "
";
bar( 'myevent.post', array($foo, 'memberMethod') );
function bar( $something, $callback ) {
// invoking the callback immediately
// ZendFramework will store the callback and invoke it when the specified event occurs
echo $callback(), "
";
}
Now replace function bar()
by Zend\EventManager::attach()
and class Foo
by MyModule\Controller\MyController
and you're "at" the problem.