Signals

Kehikko supports signalling. Sending end must call emit() to send a signal. Receiving end must hook into the signal in configuration.

Note: So far there is no way to hook into signals in the run time

Catching signals

Signals are catched by hooking into them in configuration:

signals:
  log_record: # this signal is always emitted by any log_* -function
    - call: MyModule\MyClass@recordLogMessage
  MyModule\MyClass@generateNewSignal: # this is our own custom signal
    - call: someoneElseMadeThisFunction

Now by creating following code snippets the signalling starts working:

namespace MyModule;

class MyClass
{
    public function recordLogMessage($level, $message)
    {
        if ($level === LOG_EMERGENCY) {
            /* now we are in trouble */
            mail('admin@example.com', 'Very bad thing', $message);
        }
    }

    public function generateNewSignal($data) {
        emit();
    }
}
function someoneElseMadeThisFunction($data)
{
    var_dump($data);
}

$o = new MyModule\MyClass();
/* dump array in the function above */
$o->generateNewSignal([1,2,3]);
/* send an error email */
log_emergency('Error!');

See also: Read more about how calls can be used

Functions

emit(string $signal = null, array $args = [])

Emit a signal that can be caught elsewhere in the software.

When called without any arguments, emits a signal with the same exact arguments as the function/method it was called in. Name of the signal in this case is either the function name or class@method.

When called with arguments, first argument is the signal name and the second is an array of arguments given to the signal.