mehr-it/levi-assets-linker

用于 mehr-it/levi-assets 的框架独立链接组件

1.1.0 2021-08-09 12:50 UTC

This package is auto-updated.

Last update: 2024-09-20 01:01:32 UTC


README

Latest Version on Packagist Build Status

为 mehr-it/levi-assets 包提供框架独立的链接组件。它允许从 Laravel 框架之外生成链接。

此独立链接组件背后的概念允许使用 laravel 应用生成所有必要的页面数据并将其存储在用于独立请求处理器的应用中。此应用可以非常轻量级,没有任何框架开销。它仅使用链接组件,以动态解析资产链接。

安装

您可以通过 composer 安装此包

composer require mehr-it/levi-assets-linker

链接器的角色

除了生成链接外,链接器的工作是选择给定资产的最适合的构建资产。因此,它接收一个包含资产所有构建路径的列表以选择一个用于链接。如果没有过滤器,链接器将简单地选择第一个构建来生成链接。然而,链接过滤器可以修改(排序、删除、...)构建列表。它们也可以修改链接器从路径生成的 URL。

链接器配置

可以使用静态 configure() 方法配置链接器

AssetLinker::configure([

    // configures the path prefix prepended to all asset paths
    'root' => 'my/assets',
    
    // allows to define a custom implementaion of the AssetLinker
    'class' => MyAssetLinker::class,
    
    // defines the default link filters to apply when generating links
    'default_filters' => [
    
        // the first item specifies the filter name, all others are passed as arguments
        ['proto', 'https'],
        ['host', 'cdn.my-page.com'],
    ],
    
    // allows to register custom filter classes
    'filters' => [
        'myFilter' => MyCustomFilter::class,
    ] 
]);

每次调用 configure() 都将重置任何以前的配置。

链接资产

静态 link 方法使用先前设置的配置生成链接

$link = AssetLinker::link($request, $paths, $linkFilters, $query);

第一个参数预期包含一个与 PSR-7 兼容的请求表示。此请求对象传递给所有链接过滤器,以便它们可以选择最适合的资产构建。

第二个参数必须包含包含所有资产构建路径的关联数组。构建名称用作数组键。

$linkFilters 参数允许为此调用应用自定义过滤器。它必须是一个过滤器定义数组。每个过滤器定义本身也是一个数组,由过滤器名称(在配置的 filters 选项中定义)后面跟传递给过滤器的所有参数组成。过滤器按照它们传递的顺序应用。配置的 'default_filters' 在传递的参数之前应用。

最后一个参数允许向 URL 添加查询参数。它们可以作为数组或作为已编码的查询字符串传递。

内置过滤器

链接器包附带一些预定义的过滤器,可以直接使用。

built

BuiltNameFilter 允许指定可以用于链接的资产构建。以下示例仅过滤 jpg 构建

$paths = [
    'jpg_small' => 'small/image.jpg',
    'png_small' => 'small/image.png',
    'jpg_large' => 'large/image.jpg',
    'png_large' => 'large/image.png',
];

AssetLinker::link($request, $paths, [['built', 'jpg_small', 'jpg_large']]);

pfx

BuiltNamePrefixFilter 允许通过应用前缀搜索指定可以用于资产的构建。以下示例仅过滤 jpg 构建

$paths = [
    'jpg_small' => 'small/image.jpg',
    'png_small' => 'small/image.png',
    'jpg_large' => 'large/image.jpg',
    'png_large' => 'large/image.png',
];

AssetLinker::link($request, $paths, [['pfx', 'jpg']]);

host

ReplaceAuthorityFilter 允许覆盖生成的 URL 的主机(权限)部分。当需要使用其他主机名时需要这样做。默认情况下,使用与请求主机名相同的值。

AssetLinker::link($request, $paths, [['host', 'www.example.com']]);

proto

ReplaceSchemeFilter 允许覆盖生成的 URL 的协议(方案)部分。这可以用于强制 HTTPS。默认情况下,使用与请求方案相同的值。

AssetLinker::link($request, $paths, [['proto', 'https']]);

replacePath

ReplacePathFilter 允许对生成的 URL 的路径部分进行正则表达式替换。这可能很有用,例如,如果您需要在路径中添加前缀。注意:如果为空,则路径始终以 "/" 开头

// prepend prefix "_pfx" to the path
AssetLinker::link($request, $paths, [['replacePath', '%^(/.*$%', '_pfx$1']]);

webp

PreferWebPFilter 允许在浏览器支持的情况下优先显示 WebP 格式的图片。参数必须通过名称识别 WebP 图片构建。

$paths = [
        'webp_small' => 'small/image.webp',
        'png_small'  => 'small/image.png',
        'webp_large' => 'large/image.webp',
        'png_large'  => 'large/image.png',
    ];

AssetLinker::link($request, $paths, [['webp', 'webp_small', 'webp_large']]);

如果浏览器在请求的 accept 头中包含了 'image/webp',则 "webp_small" 和 "webp_large" 构建将在构建数组中优先排序。

如果浏览器未表明支持 WebP,则在其他可用的情况下,将移除 WebP 构建。