跳转到内容

HTML 链接


概览

Phalcon\Html\Link\EvolvableLink, Phalcon\Html\Link\EvolvableLinkProvider, Phalcon\Html\Link\LinkPhalcon\Html\Link\LinkProvider是基于实现的类PSR-13,但具有更严格的类型

注意

该组件不会生成任何 HTML 链接。它只是存储链接。你需要创建序列化器来解析这些对象并生成必要的输出。可用的Phalcon\Html\Link\Serializer\Header序列化器供你使用。

操作

The Phalcon\Html\Link\*组件实现了与以下规范一致的方法PSR-13,但并未实现特定的接口。一个实现PSR-13的包可用,该包使用了Phalcon\Html\Link\*组件。该包位于点击这里。要使用它,你需要安装 Phalcon,然后通过 Composer 安装代理包。

composer require phalcon/proxy-psr13

使用代理类可以让你遵循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"
;

自定义

你可以通过扩展Phalcon\Html\Link\Serializer\SerializerInterface

<?php

namespace MyApp\Html\Serializers;

use Phalcon\Html\Link\Serializer\SerializerInterface;

class Custom implements SerializerInterface 
{
    public function serialize(array $links): ?string
    {
        // ....
    }
}
无噪 Logo
无噪文档
25 年 6 月翻译
文档源↗