Phalcon资源文件管理(Assets Management)
资源文件管理(Assets Management)¶
Phalcon\Assets是一个让开发人员管理静态资源的组件,如管理css,javascript等。
Phalcon\Assets\Manager 存在于DI容器中,所以我们能够在服务容器存在的
不论什么地方使用它来加入/管理资源。
加入资源(Adding Resources)¶
Assets支持两个内置的资源管理器:css和javascripts.我们能够依据须要创建其他的资源。资源管理器内部保存了两类资源集合一为 javascript还有一为css.
我们能够很easy的向这两个集合里加入资源。例如以下:
<?php class IndexController extends Phalcon\Mvc\Controller
{
public function index()
{ //加入本地css资源
$this->assets
->addCss('css/style.css')
->addCss('css/index.css'); //加入本地js资源
$this->assets
->addJs('js/jquery.js')
->addJs('js/bootstrap.min.js'); }
}
然后我们能够在视图中输出资源:
<html>
<head>
<title>Some amazing website</title>
<?php $this->assets->outputCss() ?>
</head>
<body> <!-- ... --> <?php $this->assets->outputJs() ? >
</body>
<html>
Volt语法:
<html>
<head>
<title>Some amazing website</title>
{{ assets.outputCss() }}
</head>
<body> <!-- ... --> {{ assets.outputJs() }}
</body>
<html>
本地与远程资源(Local/Remote resources)¶
本地资源是同一应用中的资源,这些资源存在于应用的根文件夹中。 Phalcon\Mvc\Url 用来生成
本地的url. 远程资源即是一种存在于CDN或其他远程server上的资源。比方经常使用的jquery, bootstrap等资源。
<?php public function indexAction()
{ //加入远程及本地资源
$this->assets
->addCss('//netdna.bootstrapcdn.com/twitter-bootstrap/2.3.1/css/bootstrap-combined.min.css', true )
->addCss('css/style.css', false );
}
集合(Collections)¶
集合即是把一同类的资源放在一些。资源管理器隐含的创建了两个集合:css和js. 当然我们能够创建其他的集合以归类其他的资源。 这样我们能够非常easy的 在视图里显示:
<? php //html头部的js资源
$this->assets
->collection('header')
->addJs('js/jquery.js')
->addJs('js/bootstrap.min.js'); //html尾部的js资源
$this->assets
->collection('footer')
->addJs('js/jquery.js')
->addJs('js/bootstrap.min.js');
然后在视图中例如以下使用:
<html>
<head>
<title>Some amazing website</title>
<? php $this->assets->outputJs('header') ? >
</head>
<body> <!-- ... --> <?php $this->assets->outputJs('footer') ?>
</body>
<html>
Volt语法:
<html>
<head>
<title>Some amazing website</title>
{{ assets.outputCss('header') }}
</head>
<body> <!-- ... --> {{ assets.outputJs('footer') }}
</body>
<html>
前缀(Prefixes)¶
集合能够加入前缀,这能够实现很easy的更换server:
<? php $scripts = $this->assets->collection('footer'); if ($config->environment == 'development') {
$scripts->setPrefix('/');
} else {
$scripts->setPrefix('http:://cdn.example.com/');
} $scripts->addJs('js/jquery.js')
->addJs('js/bootstrap.min.js');
我们也能够使用链式语法,例如以下:
<? php $scripts = $assets
->collection('header')
->setPrefix('http://cdn.example.com/')
->setLocal(false)
->addJs('js/jquery.js')
->addJs('js/bootstrap.min.js');
压缩与过滤(Minification/Filtering)¶
Phalcon\Assets提供了内置的js及css压缩工具。
开发人员能够设定资源管理器以确定对哪些资源进行压缩啊些资源不进行压缩。
除了上面这些之外 我们还能够使用Douglas Crockford书写的Jsmin压缩工具,及Ryan Day提供的CSSMin来对js及css文件进行压缩. 以下的样例中展示了怎样使用集合对资源文件进行压缩:
<?php $manager //这些javascript资源位于html文件的底部
->collection('jsFooter') //终于输出名
->setTargetPath('final.js') //使用此uri显示资源
->setTargetUri('production/final.js') //加入远程资源但不压缩
->addJs('code.jquery.com/jquery-1.10.0.min.js', true, false) //这些资源必需要压缩
->addJs('common-functions.js')
->addJs('page-functions.js') //把这些资源放入一个文件内
->join(true) //使用内置的JsMin过滤器
->addFilter(new Phalcon\Assets\Filters\Jsmin()) //使用自己定义过滤器
->addFilter(new MyApp\Assets\Filters\LicenseStamper());
開始部分我们通过资源管理器取得了一个命名的集合,集合中能够包括javascript或css资源但不能同一时候包括两个。一些资源可能位于远程的server上 这上结资源我们能够通过http取得。为了提高性能建议把远程的资源取到本地来。以降低载入远程资源的开销。
<?php //这些Javscript文件放在页面的底端
$js = $manager->collection('jsFooter');
如上面,addJs方法用来加入资源到集合中,第二个參数指示了资源是否为外部的,第三个參数指示是否须要压缩资源:
<?php //加入远程资源但不压缩
$js->addJs('code.jquery.com/jquery-1.10.0.min.js', true, false); // These are local resources that must be filtered
//加入本地资源并压缩
$js->addJs('common-functions.js');
$js->addJs('page-functions.js');
过滤器被注冊到集合内。我们能够注冊我个过滤器,资源内容被过滤的顺序和过滤器注冊的顺序是一样的。
<?php //使用内置的Jsmin过滤器
$js->addFilter(new Phalcon\Assets\Filters\Jsmin()); //使用自己定义的过滤器
$js->addFilter(new MyApp\Assets\Filters\LicenseStamper());
注意:无论是内置的还是自己定义的过滤器对集合来说他们都是透明的。最后一步用来确定全部写到同一个文件里还是分开保存。
假设要让集合中全部的文件合成 一个文件仅仅须要使用join函数:
<?php //全并文件
$js->join(true); //设置终于输出文件
$js->setTargetPath('public/production/final.js'); //使用此uri引用js
$js->setTargetUri('production/final.js');
假设资源写入同一文件,则我们须要定义使用哪一个文件来保存要写入的资源数据。及使用一个ur来展示资源。这两个设置能够使用setTargetPath() 和setTargetUri()两个函数来配置。
内置过滤器(Built-In Filters)¶
Phalcon内置了两个过滤器以分别实现对js及css的压缩,因为二者是使用c实现的故极大的降低了性能上的开销:
过滤器 | 说明 |
---|---|
Phalcon\Assets\Filters\Jsmin | 压缩Javascript文件即去除掉javascript解释器/编译器忽略的一些字符 |
Phalcon\Assets\Filters\Cssmin | 压缩css文件即去除掉浏览器在渲染css时不须要的一些字符 |
自己定义过滤器(Custom Filters)¶
除了使用Phalcon内置的过滤器外,开发人员还能够创建自己的过滤器。
这样我们就能够使用YUI_,
Sass, Closure,等。
<?php use Phalcon\Assets\FilterInterface; /**
* 使用YUI过滤css内容
* @param string $contents
* @return string
*/
class CssYUICompressor implements FilterInterface
{ protected $_options; /**
* CssYUICompressor 构造函数
*
* @param array $options
*/
public function __construct($options)
{
$this->_options = $options;
} /**
* 运行过滤
* @param string $contents
* @return string
*/
public function filter($contents)
{ //保存字符吕内容到暂时文件里
file_put_contents('temp/my-temp-1.css', $contents); system(
$this->_options['java-bin'] .
' -jar ' .
$this->_options['yui'] .
' --type css '.
'temp/my-temp-file-1.css ' .
$this->_options['extra-options'] .
' -o temp/my-temp-file-2.css'
); //返回文件内容
return file_get_contents("temp/my-temp-file-2.css");
}
}
使用方法:
<?php //取css集合
$css = $this->assets->get('head'); //加入/启用YUI压缩器
$css->addFilter(new CssYUICompressor(array(
'java-bin' => '/usr/local/bin/java',
'yui' => '/some/path/yuicompressor-x.y.z.jar',
'extra-options' => '--charset utf8'
)));
自己定义输出(Custom Output)¶
OutputJs及outputCss方法能够根据不同的资源类来创建须要的html代码。
我们能够重写这种方法或是手动的输出这些资源方法例如以下:
<?php foreach ($this->assets->collection('js') as $resource) {
echo \Phalcon\Tag::javascriptInclude($resource->getPath());
}
Phalcon资源文件管理(Assets Management)的更多相关文章
- C#资源文件管理
1.右键项目点属性; 2.点资源项,添加资源下拉框的添加现在文件,如下图: 3.直接上代码获取并复制到指定文件夹下: private void button1_Click(object sender, ...
- 资源文件assets和 res下面raw文件的使用不同点
在建立项目中一般会默认建立assets文件,当然我们还可以在res文件下面建立raw文件夹,这里面都可以存放一些图片,音频或者文本信息,可以供我们在程序当中进行使用,不过他们两个也有不同点: asse ...
- iOS7——图像资源Images Assets
iOS7初体验(3)——图像资源Images Assets 分类: iOS开发2013-06-18 16:02 17583人阅读 评论(2) 收藏 举报 ios7Images xcassets图像资源 ...
- 图像资源Images Assets
图像资源Images Assets 开始之前,首先回顾一下iOS7初体验(1)——第一个应用程序HelloWorld中的一张图,如下所示: 本文便分享一下Images.xcassets的体验~_~ 1 ...
- JDK 之资源文件管理
JDK 之资源文件管理 JDK 规范目录(https://www.cnblogs.com/binarylei/p/10200503.html) 一.文件资源 user.home 用户目录,如 Linu ...
- android资源目录---assets与res/raw区别
android资源目录---assets与res/raw的不同 Android 2011-05-24 14:40:21 阅读20 评论0 字号:大中小 订阅 assets:用于存放需要打包到应用程 ...
- phalcon: 资源文件管 理 引入css,js
<?php class IndexController extends Phalcon\Mvc\Controller { public function index() { //添加本地css资 ...
- 【转】android资源目录---assets与res/raw区别
blog.csdn.net/hshm20517/article/details/6461890 assets:用于存放需要打包到应用程序的静态文件,以便部署到设备中.与res/raw不同点在于,ASS ...
- vue2.0 资源文件assets和static的区别
资源文件处理 在我们的项目结构里,有两个资源文件的路径,分别是:src/assets 和 static/.那这两个到底有什么区别呢? Webpacked 资源 为了回答这个问题,我们首先需要理解web ...
随机推荐
- windows环境下Mongodb分片配置
使用MongoDB的GridFS来存储文件,以前一直使用单个服务,分布式环境也一直没有配置成功,今天参考了几位大神的文章终于配置成功,再也不用担心文件存储的性能和安全啦.以下是自己部署的过程和示例,记 ...
- USACO Milk2 区间合并
这题WA了四次,后来发现不能用所谓的桶排来写 虽然空间上是可以的,但是存在这样一个问题 比如两组数据[15,20]和[21,30] 在20 和 21这两个时刻之间没有milking,但是用桶排的方法写 ...
- MyEclipse8.5 中安装Spket插件
MyEclipse8.5 中安装Spket插件 安装: 1. Myeclipse8.5安装和以前低版本有些不同(没有software updates). 点击help->Myeclipse Co ...
- jquery ajax json 数据的遍历
需求:进行ajax请求后,后台传递回来以下json数据 { "data":[ {","name":"选择A","valu ...
- ubuntu学习: apt-get命令
1.apt-get update 更新软件源本地缓存文件 2.apt-cache search 查找软件包,找到想要安装的包,如 sudo apt-cache search mysql-server ...
- HDU SPFA算法 Invitation Cards
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1535 分析: 题意:求1点到其它点的最短距离之和+其它点到1点的最短距离之和 前面一部分直接用SPFA ...
- POJ 3422 Kaka's Matrix Travels (最小费用最大流)
POJ 3422 Kaka's Matrix Travels 链接:http://poj.org/problem? id=3422 题意:有一个N*N的方格,每一个方格里面有一个数字.如今卡卡要从左上 ...
- Permutations【python】
class Solution: # @param num, a list of integer # @return a list of lists of integers def permute(se ...
- 数据库基础学习3-T-SQL语句
一.语句操作的基本方法 1.选中执行. 2.注释的方法‘--’. 二.数据类型 整数:int,bigint,smallint 小数:float,decimal(长度,精度) 字符:char(n),va ...
- JRE 和 JDK 的区别是什么?
JRE: Java Runtime Environment JDK:Java Development Kit JRE顾名思义是java运行时环境,包含了java虚拟机,java基础类库.是使用java ...