vigazzola / asset
Requires
- php: ^7.1
- kriswallsmith/assetic: ^1.2.1
- mongodb/mongodb: ^1.2
- vigazzola/common: ^0.1
- zendframework/zend-stdlib: ^3.1
This package is not auto-updated.
Last update: 2024-09-24 04:10:33 UTC
README
接口到
Assetic 资产管理框架: https://travis-ci.org/kriswallsmith/assetic
模块可以与 Zend Framework 和 Zend Expressive 应用程序一起使用。它提供通过配置文件加载资产和非公共目录中文件的特性。
资产管理器通过中间件和配置文件加载。
示例 - 在 Zend Expressive 应用程序的 /config/pipeline.php 文件中插入
//...............
// Register the dispatch middleware in the middleware pipeline
$app->pipeDispatchMiddleware();
$app->pipe(\Vigazzola\Asset\Middleware\Aggregate::class);
// At this point, if no Response is returned by any middleware, the
// NotFoundHandler kicks in; alternately, you can provide other fallback
// middleware to execute.
$app->pipe(NotFoundHandler::class);
可用的中间件符合组织资产的不同方式,每种方式都有一个可能的配置。
中间件
映射
每个请求的资源都有一个与其一一对应的文件。
在: /config/pipeline.php
$app->pipe(\Vigazzola\Asset\Middleware\Map::class);
配置文件示例
<?php
$baseDir = dirname(__FILE__) ;
return [
'asset' => [
'resolver' => [
'map' => [
'/test.js' => $baseDir . '/../../test/public/test.js'
],
]
]
]
路径
请求的资源将在配置的路径中搜索。搜索资源的目录以特定的优先级插入,目录可以通过数组添加
['path' =>realpath($baseDir . '/../../test/backbone'), 'priority' => 1000],
或者通过字符串
realpath($baseDir . '/../../test/backbone')
在最后一种情况下,将插入默认优先级(1)。
在: /config/pipeline.php
$app->pipe(\Vigazzola\Asset\Middleware\Path::class);
配置文件示例
<?php
$baseDir = dirname(__FILE__) ;
return [
'asset' => [
'resolver' => [
'paths' => [
['path' =>realpath($baseDir . '/../../test/backbone'), 'priority' => 1000],
['path' =>realpath($baseDir . '/../../test/public'), 'priority' => 100]
]
]
]
]
集合
请求的资产是由配置中定义的资源集合组成的。
在: /config/pipeline.php
$app->pipe(\Vigazzola\Asset\Middleware\Collection::class);
配置文件示例
<?php
$baseDir = dirname(__FILE__) ;
return [
'asset' => [
'resolver' => [
'collections' => [
'/js/backbone-base.js' => [
'/file1.js',
'/file2.js',
'/file3.js',
//.....
'/filen.js',
],
]
]
]
构成集合的每个资产都通过一个聚合解析器进行搜索,这是所有解析器的集合。
基本的解析器是
Vigazzola\Asset\Resolvers::class => function($container) {
return [
Vigazzola\Asset\Resolver\MapResolver::class => 4000,
Vigazzola\Asset\Resolver\CollectionResolver::class => 2000,
Vigazzola\Asset\Resolver\DirectoriesResolver::class => 1000,
Vigazzola\Asset\Resolver\PathStackResolver::class => 100
] ;
},
定义的任何过滤器都应用于集合中的每个资产。
目录
资源是由配置中定义的目录中的所有文件组成的。文件是递归添加的。
在: /config/pipeline.php
$app->pipe(\Vigazzola\Asset\Middleware\Directories::class);
配置可以有 2 种形式。简单 - MimeType 由目录中的文件定义。涉及的目录列表,带或不带优先级(见 CollectionResolver)
<?php
$baseDir = dirname(__FILE__) ;
return [
'asset' => [
'resolver' => [
'directories' => [
'/js/backbone-base.js' => [
$baseDir . '/../../test/backbone',
]
],
]
]
]
或者通过配置强制 MimeType
``` php
<?php
$baseDir = dirname(__FILE__) ;
return [
'asset' => [
'resolver' => [
'directories' => [
'/js/backbone-base.js' => [
'mimetype' => 'text/ajavascript',
'directories' => [
__DIR__ . '/../assets/template/application',
]
],
]
]
]
```
定义的任何过滤器都应用于集合中的每个资产。
聚合
使用所有定义的解析器。
基本的解析器是
Vigazzola\Asset\Resolvers::class => function($container) {
return [
Vigazzola\Asset\Resolver\MapResolver::class => 4000,
Vigazzola\Asset\Resolver\CollectionResolver::class => 2000,
Vigazzola\Asset\Resolver\DirectoriesResolver::class => 1000,
Vigazzola\Asset\Resolver\PathStackResolver::class => 100
] ;
},
Cache304
如果此中间件在其他中间件之前插入,它将检查缓存中是否存在资源,检查其日期,如果没有过期则返回 304。
在: pipeline.php
// 在中间件管道中注册 dispatch 中间件 $app->pipeDispatchMiddleware();
$app->pipe(Vigazzola\Asset\Middleware\Cache304::class); // ...... $app->pipe(\Vigazzola\Asset\Middleware\Aggregate::class);
缓存
目前唯一的缓存提供者是 MongoDB。要排除缓存的使用
'dependencies' => [
'factories' => [
'Asset.Cache.Provider' => function($sm, $name = null, $options = null) {
return null ;
}
]
]
可能的设置。数据库连接参数
'asset' => [
'cache' => [
'MongoDB'=> [
'params' => [
'uri' => 'mongodb://:27017',
'uriOptions' => [],
'driverOptions' => [],
'db' => 'xxxxxxxxx',
],
],
]
]
在 MongoDB 中注册缓存的集合名称
'asset' => [
'cache' => [
'MongoDB'=> [
'collection' => 'cacheAsset'
],
]
]
缓存生命周期,以秒为单位
'asset' => [
'cache' => [
'LifeTime' => 60
]
]
过滤器
资产可以应用过滤器,为了使用它们,必须定义并按名称或 MIME 类型将其关联到资产。
过滤器可以这样关联到资产
'asset' => [
'filters' => [
'filters' => [
'<nome_asset>' => [
// Come array definendo la priorità
['filter' => '<nome_filtro>', 'priority' => <priorita - numerico>],
// Come array definendo la priorità ed eventuali opzioni come array
['filter' => '<nome_filtro>', 'priority' => <priorita - numerico>, 'options' => <array_optioni>],
// come stringa, priorità di default == 1
'AddFileNameFilter'
],
],
// Filters by mime-type
'text/javascript' => [
// ADD FIILTERS
],
// Filters by Extension
'php' => [
// ADD FIILTERS
]
]
]
目前定义了 3 个示例过滤器。
一个在类中定义:\Vigazzola\Asset\Filter\AddFileNameFilter。在输出资源的文本中添加文件的路径作为注释。
如何分配,例如。
'asset' => [
'filters' => [
'filters' => [
'/js/test.js' => [
['filter' => 'AddFileNameFilter', 'priority' => 100],
// Senza priorita
'AddFileNameFilter'
],
],
// Filters by mime-type
'text/javascript' => [
// ADD FIILTERS
],
// Filters by Extension
'php' => [
// ADD FIILTERS
]
]
]
一个在类中定义:\Vigazzola\Asset\Filter\TmplDataFilter。创建一个调用模板函数 tmpl() 的 JavaScript 函数。 https://github.com/blueimp/JavaScript-Templates
如何分配,例如。
'asset' => [
'filters' => [
'filters' => [
'/js/test.js' => [
['filter' => 'TmplDataFilter', 'priority' => 100, 'options' => ['path' => '<base_path>']],
// Senza priorita
'TmplDataFilter'
],
],
// Filters by mime-type
'text/javascript' => [
// ADD FIILTERS
],
// Filters by Extension
'php' => [
// ADD FIILTERS
]
]
]
另一个来自 assetic:\Assetic\Filter\JSMinFilter::class。要添加新过滤器,请设置配置
'asset' => [
'resolver' => [
'map' => [
],
'paths' => [
]
],
'filters' => [
'dependencies' => [
'aliases' => [
'JSMinFilter' => \Assetic\Filter\JSMinFilter::class,
'jsMinFilter' => \Assetic\Filter\JSMinFilter::class,
'jsminfilter' => \Assetic\Filter\JSMinFilter::class,
],
'factories' => [
\Assetic\Filter\JSMinFilter::class => InvokableFactory::class
]
],
]
],