8000 [HttpFoundation] Add a new method Request::addLink() · symfony/symfony@4924de1 · GitHub
[go: up one dir, main page]

Skip to content

Commit 4924de1

Browse files
committed
[HttpFoundation] Add a new method Request::addLink()
1 parent 45f62a6 commit 4924de1

File tree

7 files changed

+36
-40
lines changed

7 files changed

+36
-40
lines changed

src/Symfony/Bundle/FrameworkBundle/CHANGELOG.md

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ CHANGELOG
44
4.2.0
55
-----
66

7-
* Added a `Symfony\Bundle\FrameworkBundle\Controller\AbstractController::addLink()` method to add Link headers to the current response
87
* Allowed configuring taggable cache pools via a new `framework.cache.pools.tags` option (bool|service-id)
98
* Allowed configuring PDO-based cache pools via a new `cache.adapter.pdo` abstract service
109
* Deprecated auto-injection of the container in AbstractController instances, register them as service subscribers instead

src/Symfony/Bundle/FrameworkBundle/Controller/ControllerTrait.php

Lines changed: 0 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -12,16 +12,13 @@
1212
namespace Symfony\Bundle\FrameworkBundle\Controller;
1313

1414
use Doctrine\Common\Persistence\ManagerRegistry;
15-
use Fig\Link\GenericLinkProvider;
16-
use Fig\Link\Link;
1715
use Psr\Container\ContainerInterface;
1816
use Symfony\Component\Form\Extension\Core\Type\FormType;
1917
use Symfony\Component\Form\FormBuilderInterface;
2018
use Symfony\Component\Form\FormInterface;
2119
use Symfony\Component\HttpFoundation\BinaryFileResponse;
2220
use Symfony\Component\HttpFoundation\JsonResponse;
2321
use Symfony\Component\HttpFoundation\RedirectResponse;
24-
use Symfony\Component\HttpFoundation\Request;
2522
use Symfony\Component\HttpFoundation\Response;
2623
use Symfony\Component\HttpFoundation\ResponseHeaderBag;
2724
use Symfony\Component\HttpFoundation\StreamedResponse;
@@ -30,7 +27,6 @@
3027
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
3128
use Symfony\Component\Security\Core\Exception\AccessDeniedException;
3229
use Symfony\Component\Security\Csrf\CsrfToken;
33-
use Symfony\Component\WebLink\EventListener\AddLinkHeaderListener;
3430

3531
/**
3632
* Common features needed in controllers.
@@ -402,21 +398,4 @@ protected function dispatchMessage($message)
402398

403399
return $this->container->get('message_bus')->dispatch($message);
404400
}
405-
406-
/**
407-
* Adds a Link HTTP header to the current response.
408-
*
409-
* @see https://tools.ietf.org/html/rfc5988
410-
*
411-
* @final
412-
*/
413-
protected function addLink(Request $request, Link $link)
414-
{
415-
if (!class_exists(AddLinkHeaderListener::class)) {
416-
throw new \LogicException('You can not use the "addLink" method if the WebLink component is not available. Try running "composer require symfony/weblink".');
417-
}
418-
419-
$linkProvider = $request->attributes->get('_links', new GenericLinkProvider());
420-
$request->attributes->set('_links', $linkProvider->withLink($link));
421-
}
422401
}

src/Symfony/Bundle/FrameworkBundle/Tests/Controller/ControllerTraitTest.php

Lines changed: 0 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111

1212
namespace Symfony\Bundle\FrameworkBundle\Tests\Controller;
1313

14-
use Fig\Link\Link;
1514
use Symfony\Bundle\FrameworkBundle\Controller\ControllerTrait;
1615
use Symfony\Bundle\FrameworkBundle\Tests\TestCase;
1716
use Symfony\Component\DependencyInjection\Container;
@@ -529,21 +528,6 @@ public function testGetDoctrine()
529528

530529
$this->assertEquals($doctrine, $controller->getDoctrine());
531530
}
532-
533-
public function testAddLink()
534-
{
535-
$request = new Request();
536-
$link1 = new Link('mercure', 'https://demo.mercure.rocks');
537-
$link2 = new Link('self', 'https://example.com/foo');
538-
539-
$controller = $this->createController();
540-
$controller->addLink($request, $link1);
541-
$controller->addLink($request, $link2);
542-
543-
$links = $request->attributes->get('_links')->getLinks();
544-
$this->assertContains($link1, $links);
545-
$this->assertContains($link2, $links);
546-
}
547531
}
548532

549533
trait TestControllerTrait
@@ -568,6 +552,5 @@ trait TestControllerTrait
568552
createForm as public;
569553
createFormBuilder as public;
570554
getDoctrine as public;
571-
addLink as public;
572555
}
573556
}

src/Symfony/Component/HttpFoundation/CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ CHANGELOG
44
4.2.0
55
-----
66

7+
* added a `Request::addLink()` method to add Link headers to the current response
78
* added `getAcceptableFormats()` for reading acceptable formats based on Accept header
89
* the default value of the "$secure" and "$samesite" arguments of Cookie's constructor
910
will respectively change from "false" to "null" and from "null" to "lax" in Symfony

src/Symfony/Component/HttpFoundation/Request.php

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,12 @@
1111

1212
namespace Symfony\Component\HttpFoundation;
1313

14+
use Fig\Link\GenericLinkProvider;
15+
use Fig\Link\Link;
1416
use Symfony\Component\HttpFoundation\Exception\ConflictingHeadersException;
1517
use Symfony\Component\HttpFoundation\Exception\SuspiciousOperationException;
1618
use Symfony\Component\HttpFoundation\Session\SessionInterface;
19+
use Symfony\Component\WebLink\EventListener\AddLinkHeaderListener;
1720

1821
/**
1922
* Request represents an HTTP request.
@@ -1695,6 +1698,21 @@ public function isXmlHttpRequest()
16951698
return 'XMLHttpRequest' == $this->headers->get('X-Requested-With');
16961699
}
16971700

1701+
/**
1702+
* Adds a Link HTTP header to the corresponding response, using the WebLink component.
1703+
*
1704+
* @see https://tools.ietf.org/html/rfc5988
1705+
*/
1706+
public function addLink(Link $link)
1707+
{
1708+
if (!class_exists(AddLinkHeaderListener::class)) {
1709+
throw new \LogicException('You can not use the "addLink" method if the WebLink component is not available. Try running "composer require symfony/weblink".');
1710+
}
1711+
1712+
$linkProvider = $this->attributes->get('_links', new GenericLinkProvider());
1713+
$this->attributes->set('_links', $linkProvider->withLink($link));
1714+
}
1715+
16981716
/*
16991717
* The following methods are derived from code of the Zend Framework (1.10dev - 2010-01-24)
17001718
*

src/Symfony/Component/HttpFoundation/Tests/RequestTest.php

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111

1212
namespace Symfony\Component\HttpFoundation\Tests;
1313

14+
use Fig\Link\Link;
1415
use PHPUnit\Framework\TestCase;
1516
use Symfony\Component\HttpFoundation\Exception\SuspiciousOperationException;
1617
use Symfony\Component\HttpFoundation\Request;
@@ -2212,6 +2213,20 @@ public function testTrustedPort()
22122213

22132214
$this->assertSame(443, $request->getPort());
22142215
}
2216+
2217+
public function testAddLink()
2218+
{
2219+
$request = new Request();
2220+
$link1 = new Link('mercure', 'https://demo.mercure.rocks');
2221+
$link2 = new Link('self', 'https://example.com/foo');
2222+
2223+
$request->addLink($link1);
2224+
$request->addLink($link2);
2225+
2226+
$links = $request->attributes->get('_links')->getLinks();
2227+
$this->assertContains($link1, $links);
2228+
$this->assertContains($link2, $links);
2229+
}
22152230
}
22162231

22172232
class RequestContentProxy extends Request

src/Symfony/Component/HttpFoundation/composer.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,8 @@
2121
},
2222
"require-dev": {
2323
"predis/predis": "~1.0",
24-
"symfony/expression-language": "~3.4|~4.0"
24+
"symfony/expression-language": "~3.4|~4.0",
25+
"symfony/web-link": "~3.4|~4.0"
2526
},
2627
"autoload": {
2728
"psr-4": { "Symfony\\Component\\HttpFoundation\\": "" },

0 commit comments

Comments
 (0)
0