打包 / 分发
Stack PHP 的资产管理中间件
Requires
- packaged/config: ~1.4
- packaged/helpers: ^1.0||^2.0
- packaged/http: ~1.1
- tedivm/jshrink: ~1.3
Requires (Dev)
- ext-apcu: *
- phpunit/phpunit: 10
Suggests
- ext-apcu: *
- dev-master
- 2.20.0
- 2.19.0
- 2.18.1
- 2.18.0
- 2.17.0
- 2.16.1
- 2.16.0
- 2.15.0
- 2.14.1
- 2.14.0
- 2.13.1
- 2.13.0
- 2.12.0
- 2.11.0
- 2.10.4
- 2.10.3
- 2.10.2
- 2.10.1
- 2.10.0
- 2.9.2
- 2.9.1
- 2.9.0
- 2.8.3
- 2.8.2
- 2.8.1
- 2.8.0
- 2.7.1
- 2.7.0
- 2.6.4
- 2.6.3
- 2.6.2
- 2.6.1
- 2.6.0
- 2.5.1
- 2.5.0
- 2.4.2
- 2.4.1
- 2.4.0
- 2.3.0
- 2.2.0
- 2.1.1
- 2.1.0
- 2.0.0
- 2.0.0-beta5
- 2.0.0-beta4
- 2.0.0-beta3
- 2.0.0-beta2
- 2.0.0-beta1
- 2.0.0-alpha.13
- 2.0.0-alpha.12
- 2.0.0-alpha.11
- 2.0.0-alpha.10
- 2.0.0-alpha.9
- 2.0.0-alpha.8
- 2.0.0-alpha.7
- 2.0.0-alpha.6
- 2.0.0-alpha.5
- 2.0.0-alpha.4
- 2.0.0-alpha.3
- 2.0.0-alpha.2
- 2.0.0-alpha
- 1.6.8
- 1.6.7
- 1.6.6
- 1.6.5
- 1.6.4
- 1.6.3
- 1.6.2
- 1.6.1
- 1.6.0
- 1.5.0
- 1.4.1
- 1.4.0
- 1.3.0
- 1.2.0
- 1.1.2
- 1.1.1
- 1.1.0
- 1.0.x-dev
- 1.0.1
- 1.0.0
- 0.4.2
- 0.4.1
- 0.4.0
- 0.3.4
- v0.3.3
- v0.3.2
- v0.3.1
- v0.3.0
- v0.2.0
- v0.1.0
- v0.0.3
- v0.0.2
- 0.0.1
- dev-issue-21
This package is auto-updated.
Last update: 2024-08-28 23:09:40 UTC
README
PHP 的资源管理
基本安装
以下内容应包含在您的 public/index.php 文件中
$dispatchConfig = new \Packaged\Config\Provider\ConfigSection('dispatch');
$dispatchConfig->addItem('run_on', 'path');
$dispatchConfig->addItem('run_match', 'assets');
$dispatchConfig->addItem('aliases', ['ali' => 'src/res']);
$dispatchConfig->addItem('css_config', ['minify' => 'false']);
$dispatchConfig->addItem('ext_config', [/*Config Options*/]);
$dispatcher = new \Packaged\Dispatch\Dispatch($app, $dispatchConfig);
$dispatcher->setBaseDirectory(dirname(__DIR__));
//By md5 hashing the files based on the project root, runtime hashes are
//not required, and will perform much faster
$dispatcher->setFileHashTable(
[
'src/res/css/base.css' => 'd5364e0d4c0174e4a30cea9a03af036d',
'assets/003.JPG' => '8c0d1206f71976e45cd138ed30645519'
]
);
然后您可以通过以下任一方式将其添加到请求中
Stack PHP 方法
$app = (new \Stack\Builder())
->push([$dispatcher, 'prepare'])
->resolve($app);
原始调用
$app = $dispatch->handle($request)
使用 Dispatch
您可以使用几种类型的资产管理器来生成静态资源 URI。资产管理器定义了一个路由路径,在搜索指定的资源时,处理应该从该路径开始。
配置选项
run_on / run_match
这些选项确定如何生成资产路径。
资产类型
$am = \Packaged\Dispatch\AssetManager::assetType();
默认情况下,此类型将在 /assets 中搜索,假设您希望将资产存储在该项目的根目录中的该文件夹内。如果您想更改默认的资产路径,可以使用 'assets_dir' 配置项,相对于项目基础目录。
别名类型
$am = \Packaged\Dispatch\AssetManager::aliasType('alias');
别名类型用于常见路径,您可能希望将资产分组,这些资产可能是源或供应商目录中的深路径。别名可以在配置中作为 'aliases' 配置项中的键值数组进行配置。
源类型
$am = \Packaged\Dispatch\AssetManager::sourceType();
源类型将从源文件夹加载数据。默认情况下这是 'src',但如果您将源文件存储在其他目录中,可以使用 'source_dir' 配置项进行更改。
供应商类型
$am = \Packaged\Dispatch\AssetManager::vendorType('vendor','package');
供应商类型将基础设置为 composer 指定的供应商文件夹,这通常是 /vendor/{vendor}/{package}
自动检测
$am = new \Packaged\Dispatch\AssetManager(new Class());
通过将一个类传递给资产管理器的构造函数,dispatch 将自动检测该类是否位于您的源目录中或由供应商包创建。这将为您提供供应商类型或源类型。
生成资源 URI
现在您有了资产管理器对象,您可以在项目中生成资源 URI。您只需要将相对路径(从资产管理器基础目录开始)传递给 'getResourceUri' 方法,即可返回一个完整的 URI。
<!--[if lt IE 9]>
<script src="<?= $am->getResourceUri('javascripts/ie.js'); ?>"></script>
<![endif]-->
CSS & JS 全局存储
为了代码的简洁性,您还可以将 CSS 和 JS 文件添加到存储以进行渲染,可以在需要时检索。这允许您根据子类、控制器、视图等包含相关的 CSS 或 JS 文件,在全局布局中,只需包含已构建的任何文件即可。
要包含您的 CSS 文件,只需在 assetManager 上调用 requireCss 即可
$am->requireCss(
[
'stylesheets/bootstrap',
'stylesheets/theme',
'stylesheets/widgets',
]
);
您还可以带有选项(如延迟 JS 或打印)的 CSS 文件
$am->requireCss('stylesheets/print',['media' => 'print']);
然后渲染 URL 到页面上,您有两个选项。
选项 1. 让 dispatch 为您完成所有操作
<?= $am->generateHtmlIncludes('css'); ?>
选项 2. 获取自己的 URI 和它们的选项,然后渲染它们
$uris = AssetManager::getUrisByType('css');
//Options is a key value array or options sent through by requireCss
foreach($uris as $uri => $options)
{
echo '<link href="'. $uri .'" rel="stylesheet" type="text/css">';
}
相同的功能也适用于 JavaScript,只需在方法名称和参数中将 CSS 替换为 JS 即可。
我们建议在您的代码中使用 AssetManager::TYPE_CSS 和 AssetManager::TYPE_JS,然而,为了更简洁的示例,字符串版本也是有效的。
自定义资产类型
如果需要将特定 MIME 类型或必须渲染或编译后才能分发的资产进行分发,则使用自定义资产。只需创建一个实现 IAsset(您可以扩展 AbstractAsset)的类,并将其与 AssetResponse 注册即可。
以下示例将使所有具有扩展名'ext'的请求文件以'application/x-my-asset'内容类型提供服务,并返回文件内容的MD5散列值。
class MyAsset extends AbstractAsset
{
public function getExtension()
{
return 'ext';
}
public function getContentType()
{
return "application/x-my-asset";
}
public function getContent()
{
return md5(parent::getContent());
}
}
AssetResponse::addAssetType('ext', '\MyAsset');