liip / multiplex-bundle
This Bundles enables 'multiplexing' multiple requests into a single Request/Response
Installs: 45
Dependents: 0
Suggesters: 0
Security: 0
Stars: 12
Watchers: 49
Forks: 2
Open Issues: 0
Type:symfony-bundle
Requires
- php: >=5.3.2
- symfony/framework-bundle: >=2.1,<2.3-dev
Requires (Dev)
- kriswallsmith/buzz: >=0.7
Suggests
- kriswallsmith/buzz: allows multiplexing of external requests
This package is not auto-updated.
Last update: 2020-01-18 20:57:40 UTC
README
This bundle is no longer maintained. Feel free to fork it if needed.
Overview
This Bundles enables "multiplexing" multiple requests into a single Request/Response:
for example this request:
will internally call:
/session/new
and /notifications
and return one Response:
{ "/session/new" : {"request" : "/session/new", "status": 200, "response": "the Response Content of /session/new"}, "/notifications" : {"request" : "/notifications", "status": 403, "response": "Forbidden"} }
Attention: Installing this Bundle basically lets anyone side step the security firewall. Therefore its important to either secure the multiplex route or to implement security checks inside all relevant controllers
Installation
- Add this bundle to your project with Composer:
```
$ php composer.phar require liip/multiplex-bundle
```
- Add this bundle to your application's kernel:
``` php
// app/AppKernel.php
public function registerBundles()
{
return array(
// ...
new Liip\MultiplexBundle\LiipMultiplexBundle(),
// ...
);
}
```
Configuration
The following Configuration Options exists:
allow_externals
: if enabled also external urls can be multiplexed (default: true)display_errors
: if enabled and an error occured, the error message will be returned, otherwise (if available) the http status code message (default: true)route_option
: only used in combination withrestrict_routes
, defines the route option which should be looked up ifrestrict_routes
is on (default: multiplex_expose)restrict_routes
: if enabled only routes with theroute_option
are multiplexable (default: false)
Application Configuration
here the default config
liip_multiplex: allow_externals: true display_errors: true route_option: 'multiplex_expose' restrict_routes: false
Routing Configuration
if you want to restrict multiplexing to specific routes, define the option in each route you want to expose
<route id="_my_route" pattern="/foo/bar"> <default key="_controller">MyBundle:Controller:index</default> <option key="multiplex_expose">true</option> </route>
and don't forget to set restrict_routes
to true
!
Usage
This Bundles provides a decent Javascript Library to use the Multiplexer Endpoint.
Integration of the Javascript
{% javascripts "@LiipMultiplexBundle/Resources/public/js/ajax_multiplexer.js" output='js/multiplexer.js' %} <script src="{{ asset_url }}"></script> {% endjavascripts %}
Using the Javascript Multiplexer
//configuring the Multiplexer Multiplexer.setEndpoint('/path/to/multiplexer/endpoint'); //as in your routing defaults to /multiplex.json Multiplexer.setFormat('json'); //only useful exchange format //adding Requests to the Multiplexer Multiplexer.add( {'uri' : '/foo/bar', 'method' : 'GET', 'parameters' : {'foo':'bar'}}, //the Request Object function(content) { /* ... */}, // the Success Callback function(content) { /* ... */} // the Error Callback ); Multiplexer.add( {'uri' : 'http://google.com', 'method' : 'GET', 'parameters' : {'q':'Symfony2'}}, function(content) { /* this callback is called on success for this request*/}, function(content) { /* this callback is called on error for this request*/} ); //pushing all Requests to the Server Multiplexer.call( function(r){ /* ... */ }, //the global success callback (optional) function(r){ /* ... */ } //the global error callback (optional) ); //pushing only a set of Requests to the Server Multiplexer.call(['/foo/bar']);
Tests
- To run the unit tests, require all dependencies
```
$ php composer.phar update --dev
```
- Run PHPUnit
```
$ phpunit
```
- See Travis for automated Tests
https://travis-ci.org/liip/LiipMultiplexBundle
TODO
- more output formats (usable html/xml formats)