当前位置: 首页 > news >正文

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());
}

相关文章:

  • 高清壁纸:2013年1月日历桌面壁纸免费下载
  • C# .NET开发图形图像程序时提示GDI+ 中发生一般性错误
  • centosx64 6.3安装firefox 17.0.1无法使用 flash
  • Linux下MySql安装配置方法总结
  • VC6.0入门使用
  • odbc备忘
  • C#实现网页表单自动提交
  • 分享:mahout in action ----分类的原理
  • CI框架 -- 核心文件 之 Input.php(输入数据处理文件)
  • 人人网 揭秘社交网络指开放平台技术
  • Android - 文字向上翻滚效果的实现
  • 大叔也学Xamarin系列
  • 从 相机 或者相册 获取图片显示在ImageView 上
  • 十年未变!安全,谁之责?(下)
  • linux的strace命令
  • 8年软件测试工程师感悟——写给还在迷茫中的朋友
  • canvas 绘制双线技巧
  • create-react-app做的留言板
  • el-input获取焦点 input输入框为空时高亮 el-input值非法时
  • Lsb图片隐写
  • Promise面试题,控制异步流程
  • Vue.js源码(2):初探List Rendering
  • vue从创建到完整的饿了么(11)组件的使用(svg图标及watch的简单使用)
  • Vue源码解析(二)Vue的双向绑定讲解及实现
  • 聊聊spring cloud的LoadBalancerAutoConfiguration
  • 爬虫模拟登陆 SegmentFault
  • !!【OpenCV学习】计算两幅图像的重叠区域
  • #define用法
  • #预处理和函数的对比以及条件编译
  • (多级缓存)多级缓存
  • (附源码)springboot学生选课系统 毕业设计 612555
  • (附源码)ssm基于微信小程序的疫苗管理系统 毕业设计 092354
  • (一)插入排序
  • (转)memcache、redis缓存
  • .aanva
  • .bat批处理(七):PC端从手机内复制文件到本地
  • .NET Framework 3.5中序列化成JSON数据及JSON数据的反序列化,以及jQuery的调用JSON
  • .NET MVC 验证码
  • .NET MVC第三章、三种传值方式
  • .NET 使用 ILRepack 合并多个程序集(替代 ILMerge),避免引入额外的依赖
  • .NET 使用 XPath 来读写 XML 文件
  • .net 中viewstate的原理和使用
  • .NET国产化改造探索(三)、银河麒麟安装.NET 8环境
  • .NET上SQLite的连接
  • .sh文件怎么运行_创建优化的Go镜像文件以及踩过的坑
  • @staticmethod和@classmethod的作用与区别
  • @value 静态变量_Python彻底搞懂:变量、对象、赋值、引用、拷贝
  • [AIGC] 使用Curl进行网络请求的常见用法
  • [bzoj 3534][Sdoi2014] 重建
  • [CERC2017]Cumulative Code
  • [delphi]保证程序只运行一个实例
  • [hdu4622 Reincarnation]后缀数组
  • [i.MX]飞思卡尔IMX6处理器的GPIO-IOMUX_PAD说明
  • [javascript]Tab menu实现
  • [LeetCode] Wildcard Matching