Dispatcher Events
Until now the focus was on the MVC layer of a component using com_acme as an example. For each MVC triad there are twenty-two plugin events that get broadcast via the Event API. 
However, there are another twenty-two plugin events that a plugin can tap into. Each component has a dispatcher. The dispatcher acts as a component front controller. It routes the request to the correct controller, which then handles it form there.
The abstract dispatcher KDispatcherAbstract has four action methods: 
| method | description | 
|---|---|
| _actionDispatch | Loads the controller and executing the right action on the controller. | 
| _actionForward | Handles the redrection of a request after the dispatchmethod has done its work | 
| _actionFail | Prepares an Exceptionresponse for the client | 
| _actionSend | Used to send the response to the client | 
The HTTP dispatcher KDispatcherHttp adds seven more actions which correspond to the HTTP methods: 
| method | description | 
|---|---|
| _actionHead | Respond to request with headers only | 
| _actionOptions | Respond with HTTP verbs allowed by controller for the authenticated user | 
| _actionGet | Execute the GET request against the right controller | 
| _actionPost | Interpret the POST request to determine the right non-safe action to take, i.e. add,edit,delete | 
| _actionPut | Results in an addoreditaction being called on the controller. | 
| _actionDelete | Handles the request made with DELETE HTTP method. Will execute deleteon the controller. | 
| _actionRedirect | Handles redirection after dispatching is complete, of if called from another dispatcher method | 
PlgAcmeExample with a Dispatcher Event Handler
 Your plugin can control how any Joomlatools component handles the actions described above. A few example uses:
- component wide access control
- HTTP method restriction
- request logging
- override all controller redirects
You should use the dispatcher event handlers only when you want to effect a component when it's being dispatched. If you wish to intercept an event for a specific entity, use one of the MVC event handlers.
Here is the PlgAcmeExample with a new event handler. It checks that any POST request coming into com_acme has a foo variable before allowing the dispatcher to continue. 
class PlgAcmeExample extends PlgKoowaSubscriber
{
...
    function onBeforeAcmeDispatcherPost(KEventInterface $event)
    {
        if(!$event->getSubject()->getRequest()->foo) {
            JFactory::getApplication()->redirect('/', 'You have no Foo!');  
        }      
    }
}
Note: The naming convention is close to the MVC listeners, but there is no entity:
on + [Before] + [Acme] + [Dispatcher] + [Post]
