AjaxEngineBundle
Installation
Step 1
To install bundle in your project, add below line to your composer.json file:, (*1)
// composer.json
{
    // ...
    "require": {
        // ...
        "valantir/ajaxenginebundle": "dev-master"
    }
}
NOTE: Please replace dev-master with the latest stable version, for example 1.0.1., (*2)
Then install bundle by running update command:, (*3)
$ php composer.phar update valantir/ajaxenginebundle
Now you need to add bundle to your AppKernel.php file:, (*4)
<?php
// in AppKernel::registerBundles()
$bundles = array(
    // ...
    new Valantir\AjaxEngineBundle\AjaxEngineBundle(),
    // ...
);
Step 2 (optional)
If you want to flash messages will be send to browser as header add below code to your config.yml file., (*5)
ajax_engine:
    flash_messages:
        type: header #header or html - if header then flash messages are in header "Flash-Messages" in json format
Step 3
Now each template files need to extends layout.html.twig file existing in AjaxEngineBundle. Add this line to first line in your file, (*6)
{% extends "AjaxEngineBundle::layout.html.twig" %}
All content need to be in content block like this:, (*7)
{% block content %}
    {# your twig code #}
{% endblock content %}
Support
Bundle uses jQuery 1.11.2 and modernizr in version 2.8.3., (*8)
Tested on :
 - Chrome 43, 
 - FireFox 38, 
 - Opera 30.0, 
 - Safari 5.1.7, 
 - IE 11, (*9)
Events
| Event name | Description | Parameters | 
| beforeAddClass | calls before engine add class "engine-on" to links and forms | - | 
| afterAddClass | calls after engine add class "engine-on" to links and forms | - | 
| beforeDone | calls before ajax done function - before data from request will be added to ajax-container | parameters = [{'response': response, 'status': status, 'xhr': xhr}] | 
| afterDone | calls after ajax done function - after data from request will be added to ajax-container | parameters = [{'response': response, 'status': status, 'xhr': xhr}] | 
| beforeAlways | calls before ajax always function | parameters = [{'response': response, 'status': status, 'xhr': xhr}] | 
| afterAlways | calls after ajax always function | parameters = [{'response': response, 'status': status, 'xhr': xhr}] | 
| beforeSend | calls before ajax beforeSend function | parameters = [{'xhr': xhr: 'settings': settings}] |