hermes-php / asset-middleware
一个用于加载公共资产的中间件
Requires
- php: >=7.2
- psr/container: ^1.0
- psr/http-factory: ^1.0
- psr/http-server-middleware: ^1.0
- ralouphie/mimey: ^2.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^2.13
- phpunit/phpunit: ^7.5
- zendframework/zend-diactoros: ^2.1
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
实现。