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 ...
随机推荐
- Android自动化测试基础知识——MONKEY测试工具(转的)
本周开始启动手机输入法simeiji的自动化测试,同时开始接触手机浏览器自动化测试.接下来会对android自动化测试工具和方法做一个专题研究. 第一篇介绍monkey测试工具. 1 自动化测试背景 ...
- c++,派生类对象可以对基类赋值,基类对派生类不可以赋值
派生类对象可以对基类对象赋值,赋值时属于派生类独有的部分就舍弃不用. #include <iostream> using namespace std; class DemoA { publ ...
- linux下编码和vim编码问题解决
Linux下编码问题 在Linux环境下经常会出现文件乱码的问题,这实际上就是因为文件编码,以Ubuntu为例,默认的字符编码为UTF-8,并且没有默认安装gbk和gb2312,所以需要我们进行安装和 ...
- VMware Workstation9安装Mac OS X10.9系统
链接地址:http://jingyan.baidu.com/article/aa6a2c142cef740d4c19c426.html VMware Workstation9.0安装Mac OS X1 ...
- BZOJ 1412: [ZJOI2009]狼和羊的故事( 最小割 )
显然是最小割...把狼的领地连S, 羊的领地连T, 然后中间再连边, 跑最大流就OK了 -------------------------------------------------------- ...
- HDU 4267 线段树 离散点区间更新, 自叶子节点至根单点查询
题意: n个数字 下面n个数字表示数列 2个操作 1 [u, v] k add [u,v ]区间 (u点要计算)每隔k个位置,该数字+add 2 pos 询问 pos下标的值(下标从1开始) 思路 ...
- ASP.net 学习路线(详细)
.net学习路线 入门篇1. 学习面向对象(OOP)的编程思想 许多高级语言都是面向对象的编程,.NET也不例外.如果您第一次接触面向对象的编程,就必须理解类.对象.字段.属性.方法和 ...
- Hibernate执行sql语句
Hibernate执行sql语句:BasicServiceImpl basicServiceImpl = new BasicServiceImpl();String hql = "selec ...
- VC中关于 0xcccccccc和 0xcdcdcdcd异常
VC在调试时,可能会报“写入位置0xcccccccc 时发生访问冲突”,或者“写入位置0xcdcdcdcd 时发生访问冲突”,这些问题可能是由于使用了未初始化的指针引起的. 在 Debug 模式下,V ...
- 配置免安装版JAVA1.7的环境变量
我用的是免安装版JAVA1.7,假设想获取JDK能够联系问我要. 1.開始配置环境变量,右击[我的电脑]---[属性]-----[高级]---[环境变量],如图: 2.选择[新建系统变量]--弹出&q ...