Changelog ========= * **2012-11-05**: Filters have been renamed to application middlewares in the documentation. * **2012-11-05**: The ``before()``, ``after()``, ``error()``, and ``finish()`` listener priorities now set the priority of the underlying Symfony event instead of a custom one before. * **2012-11-05**: Removing the default exception handler should now be done via its ``disable()`` method: Before: unset($app['exception_handler']); After: $app['exception_handler']->disable(); * **2012-07-15**: removed the ``monolog.configure`` service. Use the ``extend`` method instead: Before:: $app['monolog.configure'] = $app->protect(function ($monolog) use ($app) { // do something }); After:: $app['monolog'] = $app->share($app->extend('monolog', function($monolog, $app) { // do something return $monolog; })); * **2012-06-17**: ``ControllerCollection`` now takes a required route instance as a constructor argument. Before:: $controllers = new ControllerCollection(); After:: $controllers = new ControllerCollection(new Route()); // or even better $controllers = $app['controllers_factory']; * **2012-06-17**: added application traits for PHP 5.4 * **2012-06-16**: renamed ``request.default_locale`` to ``locale`` * **2012-06-16**: Removed the ``translator.loader`` service. See documentation for how to use XLIFF or YAML-based translation files. * **2012-06-15**: removed the ``twig.configure`` service. Use the ``extend`` method instead: Before:: $app['twig.configure'] = $app->protect(function ($twig) use ($app) { // do something }); After:: $app['twig'] = $app->share($app->extend('twig', function($twig, $app) { // do something return $twig; })); * **2012-06-13**: Added a route ``before`` middleware * **2012-06-13**: Renamed the route ``middleware`` to ``before`` * **2012-06-13**: Added an extension for the Symfony Security component * **2012-05-31**: Made the ``BrowserKit``, ``CssSelector``, ``DomCrawler``, ``Finder`` and ``Process`` components optional dependencies. Projects that depend on them (e.g. through functional tests) should add those dependencies to their ``composer.json``. * **2012-05-26**: added ``boot()`` to ``ServiceProviderInterface``. * **2012-05-26**: Removed ``SymfonyBridgesServiceProvider``. It is now implicit by checking the existence of the bridge. * **2012-05-26**: Removed the ``translator.messages`` parameter (use ``translator.domains`` instead). * **2012-05-24**: Removed the ``autoloader`` service (use composer instead). The ``*.class_path`` settings on all the built-in providers have also been removed in favor of Composer. * **2012-05-21**: Changed error() to allow handling specific exceptions. * **2012-05-20**: Added a way to define settings on a controller collection. * **2012-05-20**: The Request instance is not available anymore from the Application after it has been handled. * **2012-04-01**: Added ``finish`` filters. * **2012-03-20**: Added ``json`` helper:: $data = array('some' => 'data'); $response = $app->json($data); * **2012-03-11**: Added route middlewares. * **2012-03-02**: Switched to use Composer for dependency management. * **2012-02-27**: Updated to Symfony 2.1 session handling. * **2012-01-02**: Introduced support for streaming responses. * **2011-09-22**: ``ExtensionInterface`` has been renamed to ``ServiceProviderInterface``. All built-in extensions have been renamed accordingly (for instance, ``Silex\Extension\TwigExtension`` has been renamed to ``Silex\Provider\TwigServiceProvider``). * **2011-09-22**: The way reusable applications work has changed. The ``mount()`` method now takes an instance of ``ControllerCollection`` instead of an ``Application`` one. Before:: $app = new Application(); $app->get('/bar', function() { return 'foo'; }); return $app; After:: $app = new ControllerCollection(); $app->get('/bar', function() { return 'foo'; }); return $app; * **2011-08-08**: The controller method configuration is now done on the Controller itself Before:: $app->match('/', function () { echo 'foo'; }, 'GET|POST'); After:: $app->match('/', function () { echo 'foo'; })->method('GET|POST');