12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- <?php
- /*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
- namespace Symfony\Component\WebLink;
- use Psr\Link\LinkInterface;
- /**
- * Serializes a list of Link instances to an HTTP Link header.
- *
- * @see https://tools.ietf.org/html/rfc5988
- *
- * @author Kévin Dunglas <dunglas@gmail.com>
- */
- final class HttpHeaderSerializer
- {
- /**
- * Builds the value of the "Link" HTTP header.
- *
- * @param LinkInterface[]|\Traversable $links
- */
- public function serialize(iterable $links): ?string
- {
- $elements = [];
- foreach ($links as $link) {
- if ($link->isTemplated()) {
- continue;
- }
- $attributesParts = ['', sprintf('rel="%s"', implode(' ', $link->getRels()))];
- foreach ($link->getAttributes() as $key => $value) {
- if (\is_array($value)) {
- foreach ($value as $v) {
- $attributesParts[] = sprintf('%s="%s"', $key, preg_replace('/(?<!\\\\)"/', '\"', $v));
- }
- continue;
- }
- if (!\is_bool($value)) {
- $attributesParts[] = sprintf('%s="%s"', $key, preg_replace('/(?<!\\\\)"/', '\"', $value));
- continue;
- }
- if (true === $value) {
- $attributesParts[] = $key;
- }
- }
- $elements[] = sprintf('<%s>%s', $link->getHref(), implode('; ', $attributesParts));
- }
- return $elements ? implode(',', $elements) : null;
- }
- }
|