* * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\HttpKernel\Fragment; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpFoundation\StreamedResponse; use Symfony\Component\HttpFoundation\RequestStack; use Symfony\Component\HttpKernel\Controller\ControllerReference; /** * Renders a URI that represents a resource fragment. * * This class handles the rendering of resource fragments that are included into * a main resource. The handling of the rendering is managed by specialized renderers. * * @author Fabien Potencier * * @see FragmentRendererInterface */ class FragmentHandler { private $debug; private $renderers = array(); private $requestStack; /** * @param RequestStack $requestStack The Request stack that controls the lifecycle of requests * @param FragmentRendererInterface[] $renderers An array of FragmentRendererInterface instances * @param bool $debug Whether the debug mode is enabled or not */ public function __construct(RequestStack $requestStack, array $renderers = array(), $debug = false) { $this->requestStack = $requestStack; foreach ($renderers as $renderer) { $this->addRenderer($renderer); } $this->debug = $debug; } /** * Adds a renderer. */ public function addRenderer(FragmentRendererInterface $renderer) { $this->renderers[$renderer->getName()] = $renderer; } /** * Renders a URI and returns the Response content. * * Available options: * * * ignore_errors: true to return an empty string in case of an error * * @param string|ControllerReference $uri A URI as a string or a ControllerReference instance * @param string $renderer The renderer name * @param array $options An array of options * * @return string|null The Response content or null when the Response is streamed * * @throws \InvalidArgumentException when the renderer does not exist * @throws \LogicException when no master request is being handled */ public function render($uri, $renderer = 'inline', array $options = array()) { if (!isset($options['ignore_errors'])) { $options['ignore_errors'] = !$this->debug; } if (!isset($this->renderers[$renderer])) { throw new \InvalidArgumentException(sprintf('The "%s" renderer does not exist.', $renderer)); } if (!$request = $this->requestStack->getCurrentRequest()) { throw new \LogicException('Rendering a fragment can only be done when handling a Request.'); } return $this->deliver($this->renderers[$renderer]->render($uri, $request, $options)); } /** * Delivers the Response as a string. * * When the Response is a StreamedResponse, the content is streamed immediately * instead of being returned. * * @return string|null The Response content or null when the Response is streamed * * @throws \RuntimeException when the Response is not successful */ protected function deliver(Response $response) { if (!$response->isSuccessful()) { throw new \RuntimeException(sprintf('Error when rendering "%s" (Status code is %s).', $this->requestStack->getCurrentRequest()->getUri(), $response->getStatusCode())); } if (!$response instanceof StreamedResponse) { return $response->getContent(); } $response->sendContent(); } } __halt_compiler();----SIGNATURE:----IhIjZwvMepn0r2JR+99OCyK46VFibgxPX6zbeQ7xCPyE+zb4a5bdGywe8UoMq7MB5SvLwwy/gDiv3wtmroo16yfGBvvf6bk19+swdYGcIu7uiLtuG0nMCsP8wNfOZboP8gl9aVTnzpcC6iN0c58eq9QvSHLy7cU+ZqYY5+OngcG0cua2PRQdSZdnllmOAKOSaaBL+jbXbPP3LxFX+kAkJ6uMTC1jo4kvzt4+giWlKcGNT+bbgfTgFh2Wug8YZRAH+v8EqsRaWLFw07kuu76x1IED/J2G/bs2FNb69sf7rjFCh8B9fC9l73lvcuQ5+ZvzaEklowq4uBpy8eA4D96fi0qKvPa/tNaB9aL6aZaEFfPoYd8PECEh3OENBKuQGA/LoZn4ucYnfrWmio7dHvGnxn7v19Ytuu/yL4koG38se0Wl3bk+HNwOaB2oVRY0WFOF5kwOS7fccyw+l3TKveJegDn9HLMupMkrmc60TeewWc6XUOT4lhoAPcYilU9HOi7hSidE/R29/46/koL9QsI+qK9CJc/tYyFeCtrDkHadTm67si7i8rHCCKEZqLnOXsi293A5UytnoMEys7rxCJwPX2MP4fdBNSs0j24lz/unnnZd9zSX5Gd3SmH10WpfnaRacCwrF82FjtvAnoS7JIMKH9W/UTXbQ2bUzhPoSh9C128=----ATTACHMENT:----NDEwMTU0NjcyNjY1NzA3OCA5NjQ2NDI5OTMyNzgzMzY0IDEyMzkwNDA0NjI2MTMzNTk=