vigazzola/asset

v0.1 2018-07-14 21:17 UTC

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
            ]
        ],
    ]
],