hermes-php/asset-middleware

此包已被废弃,不再维护。未建议替代包。

一个用于加载公共资产的中间件

2.0.0 2019-01-21 15:46 UTC

This package is auto-updated.

Last update: 2019-08-18 18:26:50 UTC


README

在运行非传统Web服务器(如Road Runner或React PHP)时提供静态文件和资产加载。

安装

composer require hermes-php/asset-middleware

使用

资产中间件的目的在于,如果某个URI与目录中现有的文件匹配,则构建包含该文件的响应。

唯一的要求是您提供一个 FileSource 的实现。

AssetMiddleware 附带一个工厂,它允许您以更简单的方式实例化。默认情况下,它将名为 Hermes\Asset\FileSource\FileSource 的服务注入其中。

构建文件源

有三种默认的 FileSource 实现。其中两个是装饰器。

ResponseFactoryFileSource 依赖于 ResponseFactoryInterface。它的 shouldServeFile 方法返回 true,如果请求方法是 GET,并且 serveFile 方法返回一个使用工厂的 ResponseInterface 实例。

装饰器旨在与 ResponseFactoryFileSource 一起组合,尽管您可以传递任何 FileSource 实现给它们。

AttachBodyFileSourceDecorator 检查提供的路径是否匹配请求 URI 存在(并且装饰的 FileSource 返回 true)。如果是,则使用 PSR7 流工厂实现从该文件创建流,并将其作为正文注入响应。

ContentTypeFileSourceDecorator 检查提供的路径是否有扩展名在允许服务的内容类型映射中。默认情况下,这包括应用程序将提供的最常见的文件扩展名,但它们是完全可配置的。

一个 FileSource 实现的例子可能如下所示

<?php

use Hermes\Asset\FileSource\ContentTypeFileSourceDecorator;
use Hermes\Asset\FileSource\AttachBodyFileSourceDecorator;
use Hermes\Asset\FileSource\ResponseFactoryFileSource;


$fileSource = new ContentTypeFileSourceDecorator(
    new AttachBodyFileSourceDecorator(
        new ResponseFactoryFileSource(new \Zend\Diactoros\ResponseFactory()),
        new \Zend\Diactoros\StreamFactory(),
        '/path/to/assets'
    ),
    // You can provide an extension content type map that serves only these files.
    [
        'ext' => 'some/content-type',
        'other' => 'other/content-type'    
    ]
);

您可以在这些之上实现自定义装饰器来附加传输编码头和其他内容。我们选择组合来设计文件源,以便您可以重用不同的部分并尽可能保持灵活性。它的可扩展性比继承更好。

当然,您可以放弃所有这些并从头开始制作自己的 FileSource 实现。