1<?php 2 3/* 4 * This file is part of the Silex framework. 5 * 6 * (c) Fabien Potencier <fabien@symfony.com> 7 * 8 * For the full copyright and license information, please view the LICENSE 9 * file that was distributed with this source code. 10 */ 11 12namespace Silex\Provider; 13 14use Pimple\Container; 15use Pimple\ServiceProviderInterface; 16use Silex\Api\EventListenerProviderInterface; 17use Symfony\Component\EventDispatcher\EventDispatcherInterface; 18use Symfony\Component\HttpKernel\Fragment\FragmentHandler; 19use Symfony\Component\HttpKernel\Fragment\InlineFragmentRenderer; 20use Symfony\Component\HttpKernel\Fragment\EsiFragmentRenderer; 21use Symfony\Component\HttpKernel\Fragment\HIncludeFragmentRenderer; 22use Symfony\Component\HttpKernel\EventListener\FragmentListener; 23use Symfony\Component\HttpKernel\Kernel; 24use Symfony\Component\HttpKernel\UriSigner; 25 26/** 27 * HttpKernel Fragment integration for Silex. 28 * 29 * @author Fabien Potencier <fabien@symfony.com> 30 */ 31class HttpFragmentServiceProvider implements ServiceProviderInterface, EventListenerProviderInterface 32{ 33 public function register(Container $app) 34 { 35 $app['fragment.handler'] = function ($app) { 36 return new FragmentHandler($app['request_stack'], $app['fragment.renderers'], $app['debug']); 37 }; 38 39 $app['fragment.renderer.inline'] = function ($app) { 40 $renderer = new InlineFragmentRenderer($app['kernel'], $app['dispatcher']); 41 $renderer->setFragmentPath($app['fragment.path']); 42 43 return $renderer; 44 }; 45 46 $app['fragment.renderer.hinclude'] = function ($app) { 47 $renderer = new HIncludeFragmentRenderer(null, $app['uri_signer'], $app['fragment.renderer.hinclude.global_template'], $app['charset']); 48 $renderer->setFragmentPath($app['fragment.path']); 49 50 return $renderer; 51 }; 52 53 $app['fragment.renderer.esi'] = function ($app) { 54 $renderer = new EsiFragmentRenderer($app['http_cache.esi'], $app['fragment.renderer.inline'], $app['uri_signer']); 55 $renderer->setFragmentPath($app['fragment.path']); 56 57 return $renderer; 58 }; 59 60 $app['fragment.listener'] = function ($app) { 61 return new FragmentListener($app['uri_signer'], $app['fragment.path']); 62 }; 63 64 $app['uri_signer'] = function ($app) { 65 return new UriSigner($app['uri_signer.secret']); 66 }; 67 68 $app['uri_signer.secret'] = md5(__DIR__); 69 $app['fragment.path'] = '/_fragment'; 70 $app['fragment.renderer.hinclude.global_template'] = null; 71 $app['fragment.renderers'] = function ($app) { 72 $renderers = array($app['fragment.renderer.inline'], $app['fragment.renderer.hinclude']); 73 74 if (isset($app['http_cache.esi'])) { 75 $renderers[] = $app['fragment.renderer.esi']; 76 } 77 78 return $renderers; 79 }; 80 } 81 82 public function subscribe(Container $app, EventDispatcherInterface $dispatcher) 83 { 84 $dispatcher->addSubscriber($app['fragment.listener']); 85 } 86} 87