class FragmentListener in Zircon Profile 8
Same name and namespace in other branches
- 8.0 vendor/symfony/http-kernel/EventListener/FragmentListener.php \Symfony\Component\HttpKernel\EventListener\FragmentListener
Handles content fragments represented by special URIs.
All URL paths starting with /_fragment are handled as content fragments by this listener.
If throws an AccessDeniedHttpException exception if the request is not signed or if it is not an internal sub-request.
@author Fabien Potencier <fabien@symfony.com>
Hierarchy
- class \Symfony\Component\HttpKernel\EventListener\FragmentListener implements EventSubscriberInterface
Expanded class hierarchy of FragmentListener
2 files declare their use of FragmentListener
- FragmentListenerTest.php in vendor/
symfony/ http-kernel/ Tests/ EventListener/ FragmentListenerTest.php - RoutableFragmentRenderer.php in vendor/
symfony/ http-kernel/ Fragment/ RoutableFragmentRenderer.php
File
- vendor/
symfony/ http-kernel/ EventListener/ FragmentListener.php, line 32
Namespace
Symfony\Component\HttpKernel\EventListenerView source
class FragmentListener implements EventSubscriberInterface {
private $signer;
private $fragmentPath;
/**
* Constructor.
*
* @param UriSigner $signer A UriSigner instance
* @param string $fragmentPath The path that triggers this listener
*/
public function __construct(UriSigner $signer, $fragmentPath = '/_fragment') {
$this->signer = $signer;
$this->fragmentPath = $fragmentPath;
}
/**
* Fixes request attributes when the path is '/_fragment'.
*
* @param GetResponseEvent $event A GetResponseEvent instance
*
* @throws AccessDeniedHttpException if the request does not come from a trusted IP.
*/
public function onKernelRequest(GetResponseEvent $event) {
$request = $event
->getRequest();
if ($request->attributes
->has('_controller') || $this->fragmentPath !== rawurldecode($request
->getPathInfo())) {
return;
}
if ($event
->isMasterRequest()) {
$this
->validateRequest($request);
}
parse_str($request->query
->get('_path', ''), $attributes);
$request->attributes
->add($attributes);
$request->attributes
->set('_route_params', array_replace($request->attributes
->get('_route_params', array()), $attributes));
$request->query
->remove('_path');
}
protected function validateRequest(Request $request) {
// is the Request safe?
if (!$request
->isMethodSafe()) {
throw new AccessDeniedHttpException();
}
// is the Request signed?
// we cannot use $request->getUri() here as we want to work with the original URI (no query string reordering)
if ($this->signer
->check($request
->getSchemeAndHttpHost() . $request
->getBaseUrl() . $request
->getPathInfo() . (null !== ($qs = $request->server
->get('QUERY_STRING')) ? '?' . $qs : ''))) {
return;
}
throw new AccessDeniedHttpException();
}
/**
* @deprecated since version 2.3.19, to be removed in 3.0.
*
* @return string[]
*/
protected function getLocalIpAddresses() {
@trigger_error('The ' . __METHOD__ . ' method is deprecated since version 2.3.19 and will be removed in 3.0.', E_USER_DEPRECATED);
return array(
'127.0.0.1',
'fe80::1',
'::1',
);
}
public static function getSubscribedEvents() {
return array(
KernelEvents::REQUEST => array(
array(
'onKernelRequest',
48,
),
),
);
}
}
Members
Name | Modifiers | Type | Description | Overrides |
---|---|---|---|---|
FragmentListener:: |
private | property | ||
FragmentListener:: |
private | property | ||
FragmentListener:: |
protected | function | ||
FragmentListener:: |
public static | function |
Returns an array of event names this subscriber wants to listen to. Overrides EventSubscriberInterface:: |
|
FragmentListener:: |
public | function | Fixes request attributes when the path is '/_fragment'. | |
FragmentListener:: |
protected | function | ||
FragmentListener:: |
public | function | Constructor. |