资源文件管理(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)的更多相关文章

  1. C#资源文件管理

    1.右键项目点属性; 2.点资源项,添加资源下拉框的添加现在文件,如下图: 3.直接上代码获取并复制到指定文件夹下: private void button1_Click(object sender, ...

  2. 资源文件assets和 res下面raw文件的使用不同点

    在建立项目中一般会默认建立assets文件,当然我们还可以在res文件下面建立raw文件夹,这里面都可以存放一些图片,音频或者文本信息,可以供我们在程序当中进行使用,不过他们两个也有不同点: asse ...

  3. iOS7——图像资源Images Assets

    iOS7初体验(3)——图像资源Images Assets 分类: iOS开发2013-06-18 16:02 17583人阅读 评论(2) 收藏 举报 ios7Images xcassets图像资源 ...

  4. 图像资源Images Assets

    图像资源Images Assets 开始之前,首先回顾一下iOS7初体验(1)——第一个应用程序HelloWorld中的一张图,如下所示: 本文便分享一下Images.xcassets的体验~_~ 1 ...

  5. JDK 之资源文件管理

    JDK 之资源文件管理 JDK 规范目录(https://www.cnblogs.com/binarylei/p/10200503.html) 一.文件资源 user.home 用户目录,如 Linu ...

  6. android资源目录---assets与res/raw区别

    android资源目录---assets与res/raw的不同 Android 2011-05-24 14:40:21 阅读20 评论0   字号:大中小 订阅 assets:用于存放需要打包到应用程 ...

  7. phalcon: 资源文件管 理 引入css,js

    <?php class IndexController extends Phalcon\Mvc\Controller { public function index() { //添加本地css资 ...

  8. 【转】android资源目录---assets与res/raw区别

    blog.csdn.net/hshm20517/article/details/6461890 assets:用于存放需要打包到应用程序的静态文件,以便部署到设备中.与res/raw不同点在于,ASS ...

  9. vue2.0 资源文件assets和static的区别

    资源文件处理 在我们的项目结构里,有两个资源文件的路径,分别是:src/assets 和 static/.那这两个到底有什么区别呢? Webpacked 资源 为了回答这个问题,我们首先需要理解web ...

随机推荐

  1. windows 不能在 本地计算机 启动 Apache

    可能是Apache 的监听端口与其他软件有冲突,这是新手常犯的一个错误,Windows安装了IIS服务器的同时,又安装Apache服务器,二个服务器软件都监听TCP/IP协议的80端口,于是就有其中的 ...

  2. G - I Think I Need a Houseboat(简单题,粘贴下来是因为数据精度需要注意)

    These will be floating point numbers:看这句话,就是说数据会是浮点型的, 问题(一)数据定义成double类型就过了 我当时以为定义成float类型就可以了, 因为 ...

  3. [转][Swust OJ 24]--Max Area(画图分析)

    转载自:http://www.cnblogs.com/hate13/p/4160751.html Max Area 题目描述:(链接:http://acm.swust.edu.cn/problem/2 ...

  4. 创建出多个app

    修改红线里的内容

  5. 简单cpu处理器

    在135例中有一个简单处理器的程序,稍作修改成自己的风格 //date :2013/8/22 //designer :pengxiaoen //function get a mpc with veri ...

  6. Sereja and Bottles

    http://codeforces.com/problemset/problem/315/A 题目意思是第ai的瓶子能开bi的瓶子.给你相应的数据,求无法用其他瓶子打开的数量(即需要外力). 一开始看 ...

  7. 功能间(两个form)数据交互的编程方法

    功能间数据交互的编程方法 现在框架具有在两个打开的功能之间进行通讯的机制.通讯是指,一个功能调用另外一个功能的方法,或者传递一些数据,并得到返回结果.比如处置单打开结算单,结算单保存后,将结算单号反填 ...

  8. java list三种遍历方法性能比较

    从c/c++语言转向java开发,学习java语言list遍历的三种方法,顺便测试各种遍历方法的性能,测试方法为在ArrayList中插入1千万条记录,然后遍历ArrayList,发现了一个奇怪的现象 ...

  9. 【floyd】HDU 1874 畅通project续

    之后的题解偏重有用/总结性质,尽量理解算法本身而不是题,时间复杂度什么的也能够放放. 非常久之前做过这个题,当时使用dijkstra做的,关于几个最短路算法,分类的话能够分为下面几种. 1.单源最短路 ...

  10. 基于visual Studio2013解决面试题之1306奇偶位数交换

     题目