HTML 链接¶
概览¶
Phalcon\Html\Link\EvolvableLink, Phalcon\Html\Link\EvolvableLinkProvider, Phalcon\Html\Link\Link和Phalcon\Html\Link\LinkProvider是基于实现的类PSR-13,但具有更严格的类型
注意
该组件不会生成任何 HTML 链接。它只是存储链接。你需要创建序列化器来解析这些对象并生成必要的输出。可用的Phalcon\Html\Link\Serializer\Header序列化器供你使用。
操作¶
The Phalcon\Html\Link\*
组件实现了与以下规范一致的方法PSR-13,但并未实现特定的接口。一个实现PSR-13的包可用,该包使用了Phalcon\Html\Link\*
组件。该包位于点击这里。要使用它,你需要安装 Phalcon,然后通过 Composer 安装代理包。
使用代理类可以让你遵循PSR-13并在需要该接口的其他包中使用它。
链接¶
The Phalcon\Html\Link\Link用于创建链接并在构造时为其分配属性。
<?php
use Phalcon\Html\Link\Link;
$href = 'https://dev.phalcon.ld';
$attributes = [
'one' => true,
'two' => 123,
'three' => 'four',
'five' => [
'six',
'seven',
],
];
$link = new Link('payment', $href, $attributes);
链接提供者¶
The Phalcon\Html\Link\LinkProvider用作Phalcon\Html\Link\Link对象的容器。你可以将它们添加到提供者中,然后整体访问它们或按rel
.
<?php
use Phalcon\Html\Link\Link;
use Phalcon\Html\Link\LinkProvider;
$links = [
new Link('canonical', 'https://dev.phalcon.ld'),
new Link('cite-as', 'https://test.phalcon.ld'),
];
$link = new LinkProvider($links);
var_dump(
$link->getLinksByRel('cite-as')
);
// [
// Link('cite-as', 'https://test.phalcon.ld'),
// ]
可演化的链接¶
链接对象是不可变的。然而,根据应用需求,有时需要对它们进行操作。可用的Phalcon\Html\Link\EvolvableLink允许你操作链接。
<?php
use Phalcon\Html\Link\EvolvableLink;
$href = 'https://dev.phalcon.ld';
$attributes = ['one' => true];
$link = new EvolvableLink('payment', $href, $attributes);
$newInstance = $link->withAttribute('two', 'three');
var_dump(
$newInstance->getAttributes()
);
// [
// 'one' => true,
// 'two' => 'three',
// ];
可演化的链接提供者¶
The Phalcon\Html\Link\LinkProvider用作Phalcon\Html\Link\EvolvableLink对象的容器。你可以将它们添加到提供者中,然后整体访问它们或按rel
.
<?php
use Phalcon\Html\Link\EvolvableLink;
use Phalcon\Html\Link\EvolvableLinkProvider;
$links = [
new Link('canonical', 'https://dev.phalcon.ld'),
new Link('cite-as', 'https://test.phalcon.ld'),
];
$link = new EvolvableLinkProvider($links);
var_dump(
$link->getLinksByRel('cite-as')
);
// [
// Link('cite-as', 'https://test.phalcon.ld'),
// ]
序列化器¶
标头¶
你可以使用序列化器解析Phalcon\Html\Link\*
对象并创建必要的标头。Phalcon 提供了Phalcon\Html\Link\Serializer\Header序列化器,以帮助完成将链接序列化为标头的任务:
<?php
use Phalcon\Html\Link\EvolvableLink;
use Phalcon\Html\Link\Serializer\Header;
$serializer = new Header();
$link = new EvolvableLink('prefetch', '/images/apple-icon-114.png');
echo $serializer->serialize([$link]);
// </images/apple-icon-114.png>; rel="prefetch"';
$links = [
(new EvolvableLink('preload', '/1'))
->withAttribute('as', 'image')
->withAttribute('nopush', true),
(new EvolvableLink('alternate', '/2'))
->withRel('next')
->withAttribute('hreflang', ['en', 'es'])
];
echo $serializer->serialize([$link]);
// </1>; rel="preload"; as="image"; nopush,
// </2>; rel="alternate next"; hreflang="en"; hreflang="es"
;