* * 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\HttpKernel\Controller\ControllerReference; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpKernel\EventListener\FragmentListener; /** * Adds the possibility to generate a fragment URI for a given Controller. * * @author Fabien Potencier */ abstract class RoutableFragmentRenderer implements FragmentRendererInterface { private $fragmentPath = '/_fragment'; /** * Sets the fragment path that triggers the fragment listener. * * @param string $path The path * * @see FragmentListener */ public function setFragmentPath($path) { $this->fragmentPath = $path; } /** * Generates a fragment URI for a given controller. * * @param ControllerReference $reference A ControllerReference instance * @param Request $request A Request instance * @param bool $absolute Whether to generate an absolute URL or not * @param bool $strict Whether to allow non-scalar attributes or not * * @return string A fragment URI */ protected function generateFragmentUri(ControllerReference $reference, Request $request, $absolute = false, $strict = true) { if ($strict) { $this->checkNonScalar($reference->attributes); } // We need to forward the current _format and _locale values as we don't have // a proper routing pattern to do the job for us. // This makes things inconsistent if you switch from rendering a controller // to rendering a route if the route pattern does not contain the special // _format and _locale placeholders. if (!isset($reference->attributes['_format'])) { $reference->attributes['_format'] = $request->getRequestFormat(); } if (!isset($reference->attributes['_locale'])) { $reference->attributes['_locale'] = $request->getLocale(); } $reference->attributes['_controller'] = $reference->controller; $reference->query['_path'] = http_build_query($reference->attributes, '', '&'); $path = $this->fragmentPath.'?'.http_build_query($reference->query, '', '&'); if ($absolute) { return $request->getUriForPath($path); } return $request->getBaseUrl().$path; } private function checkNonScalar($values) { foreach ($values as $key => $value) { if (is_array($value)) { $this->checkNonScalar($value); } elseif (!is_scalar($value) && null !== $value) { throw new \LogicException(sprintf('Controller attributes cannot contain non-scalar/non-null values (value for key "%s" is not a scalar or null).', $key)); } } } } __halt_compiler();----SIGNATURE:----XCqfkApFAHyy+CQVmagd/gIj9VvUPxypODpvm+AEzPrjBp+r4SJZtmRUx9WylM3SMPGpnbwsvU8I8CYPGgOdxvSDUSLTI39NlH/XmfMGBXMaA0XzKjEafgLuk/NtC0W/++g97QQB480mf+ZTNb19CGvMZlBKV+PWg/h4/0SWroR0cObFFUB1Wvx8btKAXhCZxbgOo5i21c0oT599YEOtmEahWwhWG0UtsxtUvdsXDEe8m83J/oqw9UpZAh3HS7sb4nBo9vuoR6IEGxgWv0FBkYsWw8wEtDGYQSlkQcvgw3gXAJ3r6giJmESvtvd6Vk4lAIYlj9dHeMNrDkfLyCCXJn0V66ahyEo4SH/87C4HL4Mss3zIC/V9WME9zuTEF/5OFg1vfR0msMoHhR9pWnULa9zHNji0TUnxY6nVlkoE6DhI8nLUx1ZMRDHjhxo9sleKf53y8KTX4S+wXsGmRPbZvPxojzZnTKTOsYoZzSn0P1B1TKrbWb4j/+ugb4jL3bd/c+qMEJeT4ntLIHC/eaWVfaNHE6GxheaRVFXV6pCb4kPFQh7FW7uwvqNFReVDcYfNJ6GZTQxQ4MGfEmEgpruOck6Q+6dwFJ+bvniLIa7NZACqfa9kHL3uzcp3sN1IyTmoeT5PvWKwYwy1AkdC1xK9+IU7R/dQOZnAqQuGkg16nyU=----ATTACHMENT:----NjAzNzQwNjM5NTk0MjYxMyAzMzU4MzkxOTQ4ODQ0OTI4IDUzNTA0Mjg2OTk0Mjg3MDg=