# 資源文件管理(Assets Management)
# 資源文件管理(Assets Management)
Phalcon\\Assets是一個讓開發者管理靜態資源的組件,如管理CSS,JavaScript等。[*Phalcon\\Assets\\Manager*](#) 存在于DI容器中,所以我們可以在服務容器存在的任何地方使用它來添加/管理資源。
### 添加資源(Adding Resources)
Assets支持兩個內置的資源管理器:css和javascripts.我們可以根據需要創建其它的資源。資源管理器內部保存了兩類資源集合一為javascript另一為css.
我們可以非常簡單的向這兩個集合里添加資源,如下:
```
<pre class="calibre14">```
<?php
use Phalcon\Mvc\Controller;
class IndexController extends 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');
}
}
```
```
然后我們可以在視圖中輸出資源:
```
<pre class="calibre14">```
<html>
<head>
<title>Some amazing website</title>
<?php $this->assets->outputCss() ?>
</head>
<body>
<!-- ... -->
<?php $this->assets->outputJs() ?>
</body>
<html>
```
```
Volt語法:
```
<pre class="calibre14">```
<html>
<head>
<title>Some amazing website</title>
{{ assets.outputCss() }}
</head>
<body>
<!-- ... -->
{{ assets.outputJs() }}
</body>
<html>
```
```
### 本地與遠程資源(Local/Remote resources)
本地資源是同一應用中的資源,這些資源存在于應用的根目錄中。 [*Phalcon\\Mvc\\Url*](#) 用來生成本地的url.
遠程資源即是一種存在于CDN或其它遠程服務器上的資源,比如常用的jquery, bootstrap等資源。
```
<pre class="calibre14">```
<?php
public function indexAction()
{
// 添加遠程及本地資源
$this->assets
->addCss('//netdna.bootstrapcdn.com/twitter-bootstrap/2.3.1/css/bootstrap-combined.min.css', false)
->addCss('css/style.css', true);
}
```
```
### 集合(Collections)
集合即是把一同類的資源放在一些,資源管理器隱含的創建了兩個集合:css和js. 當然我們可以創建其它的集合以歸類其它的資源, 這樣我們可以很容易的在視圖里顯示:
```
<pre class="calibre14">```
<?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');
```
```
然后在視圖中如下使用:
```
<pre class="calibre14">```
<html>
<head>
<title>Some amazing website</title>
<?php $this->assets->outputJs('header') ?>
</head>
<body>
<!-- ... -->
<?php $this->assets->outputJs('footer') ?>
</body>
<html>
```
```
Volt語法:
```
<pre class="calibre14">```
<html>
<head>
<title>Some amazing website</title>
{{ assets.outputCss('header') }}
</head>
<body>
<!-- ... -->
{{ assets.outputJs('footer') }}
</body>
<html>
```
```
### 前綴(Prefixes)
集合可以添加前綴,這可以實現非常簡單的更換服務器:
```
<pre class="calibre14">```
<?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');
```
```
我們也可以使用鏈式語法,如下:
```
<pre class="calibre14">```
<?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文件進行壓縮.下面的例子中展示了如何使用集合對資源文件進行壓縮:
```
<pre class="calibre14">```
<?php
$manager
// 這些javascript資源位于html文件的底部
->collection('jsFooter')
// 最終輸出名
->setTargetPath('final.js')
// 使用此uri顯示資源
->setTargetUri('production/final.js')
// 添加遠程資源但不壓縮
->addJs('code.jquery.com/jquery-1.10.0.min.js', false, 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資源但不能同時包含兩個。一些資源可能位于遠程的服務器上這上結資源我們可以通過http取得。為了提高性能建議把遠程的資源取到本地來,以減少加載遠程資源的開銷。
```
<pre class="calibre14">```
<?php
// 這些Javscript文件放在頁面的底端
$js = $manager->collection('jsFooter');
```
```
如上面,addJs方法用來添加資源到集合中,第二個參數指示了資源是否為外部的,第三個參數指示是否需要壓縮資源:
```
<pre class="calibre14">```
<?php
// 添加遠程資源但不壓縮
$js->addJs('code.jquery.com/jquery-1.10.0.min.js', false, false);
// These are local resources that must be filtered
// 添加本地資源并壓縮
$js->addJs('common-functions.js');
$js->addJs('page-functions.js');
```
```
過濾器被注冊到集合內,我們可以注冊我個過濾器,資源內容被過濾的順序和過濾器注冊的順序是一樣的。
```
<pre class="calibre14">```
<?php
// 使用內置的Jsmin過濾器
$js->addFilter(new Phalcon\Assets\Filters\Jsmin());
// 使用自定義的過濾器
$js->addFilter(new MyApp\Assets\Filters\LicenseStamper());
```
```
注意:不管是內置的還是自定義的過濾器對集合來說他們都是透明的。最后一步用來確定所有寫到同一個文件中還是分開保存。如果要讓集合中所有的文件合成一個文件只需要使用join函數:
```
<pre class="calibre14">```
<?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](https://developers.google.com/closure/compiler/?hl=fr),等。
```
<pre class="calibre14">```
<?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");
}
}
```
```
用法:
```
<pre class="calibre14">```
<?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代碼。我們可以重寫這個方法或是手動的輸出這些資源方法如下:
```
<pre class="calibre14">```
<?php
use Phalcon\Tag;
foreach ($this->assets->collection('js') as $resource) {
echo Tag::javascriptInclude($resource->getPath());
}
```
```
|
- [索引](# "總目錄")
- [下一頁](# "Volt 模版引擎(Volt: Template Engine)") |
- [上一頁](# "視圖助手(View Helpers)") |
- API參考
- API列表
- Abstract class Phalcon\Acl
- Abstract class Phalcon\Acl\Adapter
- Class Phalcon\Acl\Adapter\Memory
- Interface Phalcon\Acl\AdapterInterface
- Class Phalcon\Acl\Exception
- Class Phalcon\Acl\Resource
- Interface Phalcon\Acl\ResourceInterface
- Class Phalcon\Acl\Role
- Interface Phalcon\Acl\RoleInterface
- Class Phalcon\Annotations\Annotation
- Abstract class Phalcon\Annotations\Adapter
- Interface Phalcon\Annotations\AdapterInterface
- Class Phalcon\Annotations\Collection
- Class Phalcon\Annotations\Exception
- Class Phalcon\Annotations\Reader
- Interface Phalcon\Annotations\ReaderInterface
- Class Phalcon\Annotations\Reflection
- Class Phalcon\Assets\Collection
- Class Phalcon\Assets\Exception
- Interface Phalcon\Assets\FilterInterface
- Class Phalcon\Assets\Filters\Cssmin
- Class Phalcon\Assets\Filters\Jsmin
- Class Phalcon\Assets\Filters\None
- Class Phalcon\Assets\Inline
- Class Phalcon\Assets\Inline\Css
- Class Phalcon\Assets\Inline\Js
- Class Phalcon\Assets\Manager
- Class Phalcon\Assets\Resource
- Class Phalcon\Assets\Resource\Css
- Class Phalcon\Assets\Resource\Js
- Abstract class Phalcon\Cache\Backend
- Class Phalcon\Cache\Backend\Apc
- Class Phalcon\Cache\Backend\File
- Class Phalcon\Cache\Backend\Libmemcached
- Class Phalcon\Cache\Backend\Memcache
- Class Phalcon\Cache\Backend\Memory
- Class Phalcon\Cache\Backend\Mongo
- Class Phalcon\Cache\Backend\Redis
- Class Phalcon\Cache\Backend\Xcache
- Interface Phalcon\Cache\BackendInterface
- Class Phalcon\Cache\Exception
- Class Phalcon\Cache\Frontend\Base64
- Class Phalcon\Cache\Frontend\Data
- Class Phalcon\Cache\Frontend\Igbinary
- Class Phalcon\Cache\Frontend\Json
- Class Phalcon\Cache\Frontend\None
- Class Phalcon\Cache\Frontend\Output
- Interface Phalcon\Cache\FrontendInterface
- Class Phalcon\Cache\Multiple
- Class Phalcon\Cli\Router\Route
- Class Phalcon\Config
- Class Phalcon\Config\Adapter\Ini
- Class Phalcon\Config\Adapter\Json
- Class Phalcon\Config\Adapter\Php
- Class Phalcon\Config\Adapter\Yaml
- Class Phalcon\Config\Exception
- Class Phalcon\Crypt
- Class Phalcon\Crypt\Exception
- Interface Phalcon\CryptInterface
- Abstract class Phalcon\Db
- Abstract class Phalcon\Db\Adapter
- Interface Phalcon\Db\AdapterInterface
- Class Phalcon\Db\Column
- Interface Phalcon\Db\ColumnInterface
- Abstract class Phalcon\Db\Dialect
- Interface Phalcon\Db\DialectInterface
- Class Phalcon\Db\Exception
- Class Phalcon\Db\Index
- Interface Phalcon\Db\IndexInterface
- Class Phalcon\Db\Profiler
- Class Phalcon\Db\RawValue
- Class Phalcon\Db\Reference
- Interface Phalcon\Db\ReferenceInterface
- Class Phalcon\Db\Result\Pdo
- Interface Phalcon\Db\ResultInterface
- Class Phalcon\Debug
- Class Phalcon\Debug\Dump
- Class Phalcon\Debug\Exception
- Interface Phalcon\DiInterface
- Abstract class Phalcon\Dispatcher
- Interface Phalcon\DispatcherInterface
- Class Phalcon\Escaper
- Class Phalcon\Escaper\Exception
- Interface Phalcon\EscaperInterface
- Class Phalcon\Events\Event
- Interface Phalcon\Events\EventsAwareInterface
- Class Phalcon\Events\Exception
- Class Phalcon\Events\Manager
- Interface Phalcon\Events\ManagerInterface
- Class Phalcon\Exception
- Class Phalcon\Filter
- Class Phalcon\Filter\Exception
- Interface Phalcon\Filter\UserFilterInterface
- Interface Phalcon\FilterInterface
- Abstract class Phalcon\Flash
- Class Phalcon\Flash\Direct
- Class Phalcon\Flash\Exception
- Class Phalcon\Flash\Session
- Interface Phalcon\FlashInterface
- Class Phalcon\Forms\Form
- Abstract class Phalcon\Forms\Element
- Class Phalcon\Forms\Exception
- Class Phalcon\Forms\Manager
- Class Phalcon\Http\Cookie
- Class Phalcon\Http\Cookie\Exception
- Class Phalcon\Http\Request
- Class Phalcon\Http\Request\Exception
- Class Phalcon\Http\Request\File
- Interface Phalcon\Http\Request\FileInterface
- Interface Phalcon\Http\RequestInterface
- Class Phalcon\Http\Response
- Class Phalcon\Http\Response\Cookies
- Interface Phalcon\Http\Response\CookiesInterface
- Class Phalcon\Http\Response\Exception
- Class Phalcon\Http\Response\Headers
- Interface Phalcon\Http\Response\HeadersInterface
- Interface Phalcon\Http\ResponseInterface
- Class Phalcon\Image
- Abstract class Phalcon\Image\Adapter
- Class Phalcon\Image\Adapter\Imagick
- Interface Phalcon\Image\AdapterInterface
- Class Phalcon\Image\Exception
- Class Phalcon\Kernel
- Class Phalcon\Loader
- Class Phalcon\Loader\Exception
- Abstract class Phalcon\Logger
- Abstract class Phalcon\Logger\Adapter
- Class Phalcon\Logger\Adapter\File
- Class Phalcon\Logger\Adapter\Firephp
- Class Phalcon\Logger\Adapter\Stream
- Class Phalcon\Logger\Adapter\Syslog
- Interface Phalcon\Logger\AdapterInterface
- Class Phalcon\Logger\Exception
- Abstract class Phalcon\Logger\Formatter
- Interface Phalcon\Logger\FormatterInterface
- Class Phalcon\Logger\Item
- Class Phalcon\Logger\Multiple
- Class Phalcon\Mvc\Application
- Class Phalcon\Mvc\Application\Exception
- Abstract class Phalcon\Mvc\Collection
- Abstract class Phalcon\Mvc\Collection\Behavior
- Class Phalcon\Mvc\Collection\Behavior\SoftDelete
- Class Phalcon\Mvc\Collection\Behavior\Timestampable
- Interface Phalcon\Mvc\Collection\BehaviorInterface
- Class Phalcon\Mvc\Collection\Document
- Class Phalcon\Mvc\Collection\Exception
- Class Phalcon\Mvc\Collection\Manager
- Interface Phalcon\Mvc\Collection\ManagerInterface
- Interface Phalcon\Mvc\CollectionInterface
- Abstract class Phalcon\Mvc\Controller
- Interface Phalcon\Mvc\ControllerInterface
- Class Phalcon\Mvc\Dispatcher
- Class Phalcon\Mvc\Dispatcher\Exception
- Interface Phalcon\Mvc\DispatcherInterface
- Interface Phalcon\Mvc\EntityInterface
- Class Phalcon\Mvc\Micro
- Class Phalcon\Mvc\Micro\Collection
- Interface Phalcon\Mvc\Micro\CollectionInterface
- Class Phalcon\Mvc\Micro\Exception
- Class Phalcon\Mvc\Micro\LazyLoader
- Interface Phalcon\Mvc\Micro\MiddlewareInterface
- Abstract class Phalcon\Mvc\Model
- Abstract class Phalcon\Mvc\Model\Behavior
- Class Phalcon\Mvc\Model\Criteria
- Interface Phalcon\Mvc\Model\CriteriaInterface
- Class Phalcon\Mvc\Model\Exception
- Class Phalcon\Mvc\Model\Manager
- Interface Phalcon\Mvc\Model\ManagerInterface
- Class Phalcon\Mvc\Model\Message
- Interface Phalcon\Mvc\Model\MessageInterface
- Abstract class Phalcon\Mvc\Model\MetaData
- Interface Phalcon\Mvc\Model\MetaDataInterface
- Class Phalcon\Mvc\Model\Query
- Interface Phalcon\Mvc\Model\QueryInterface
- Class Phalcon\Mvc\Model\Relation
- Interface Phalcon\Mvc\Model\RelationInterface
- Interface Phalcon\Mvc\Model\ResultInterface
- Abstract class Phalcon\Mvc\Model\Resultset
- Abstract class Phalcon\Mvc\Model\Validator
- Interface Phalcon\Mvc\Model\ResultsetInterface
- Class Phalcon\Mvc\Model\Row
- Class Phalcon\Mvc\Model\Transaction
- Interface Phalcon\Mvc\Model\TransactionInterface
- Class Phalcon\Mvc\Model\ValidationFailed
- Interface Phalcon\Mvc\ModelInterface
- Interface Phalcon\Mvc\ModuleDefinitionInterface
- Class Phalcon\Mvc\Router
- Class Phalcon\Mvc\Router\Annotations
- Class Phalcon\Mvc\Router\Exception
- Class Phalcon\Mvc\Router\Group
- Interface Phalcon\Mvc\Router\GroupInterface
- Class Phalcon\Mvc\Router\Route
- Interface Phalcon\Mvc\Router\RouteInterface
- Interface Phalcon\Mvc\RouterInterface
- Class Phalcon\Mvc\Url
- Class Phalcon\Mvc\Url\Exception
- Interface Phalcon\Mvc\UrlInterface
- Class Phalcon\Mvc\User\Component
- Class Phalcon\Mvc\User\Module
- Class Phalcon\Mvc\User\Plugin
- Class Phalcon\Mvc\View
- Abstract class Phalcon\Mvc\View\Engine
- Interface Phalcon\Mvc\View\EngineInterface
- Class Phalcon\Mvc\View\Exception
- Class Phalcon\Mvc\View\Simple
- Interface Phalcon\Mvc\ViewBaseInterface
- Interface Phalcon\Mvc\ViewInterface
- Abstract class Phalcon\Paginator\Adapter
- Class Phalcon\Paginator\Adapter\Model
- Class Phalcon\Paginator\Adapter\NativeArray
- Class Phalcon\Paginator\Adapter\QueryBuilder
- Interface Phalcon\Paginator\AdapterInterface
- Class Phalcon\Paginator\Exception
- Class Phalcon\Queue\Beanstalk
- Class Phalcon\Queue\Beanstalk\Job
- Final class Phalcon\Registry
- Class Phalcon\Security
- Class Phalcon\Security\Exception
- Abstract class Phalcon\Session
- Abstract class Phalcon\Session\Adapter
- Interface Phalcon\Session\AdapterInterface
- Class Phalcon\Session\Bag
- Interface Phalcon\Session\BagInterface
- Class Phalcon\Session\Exception
- Class Phalcon\Tag
- Class Phalcon\Tag\Exception
- Abstract class Phalcon\Tag\Select
- Abstract class Phalcon\Text
- Abstract class Phalcon\Translate
- Abstract class Phalcon\Translate\Adapter
- Class Phalcon\Translate\Adapter\Csv
- Class Phalcon\Translate\Adapter\Gettext
- Class Phalcon\Translate\Adapter\NativeArray
- Interface Phalcon\Translate\AdapterInterface
- Class Phalcon\Translate\Exception
- Class Phalcon\Validation
- Class Phalcon\Validation\Exception
- Class Phalcon\Validation\Message
- Class Phalcon\Validation\Message\Group
- Interface Phalcon\Validation\MessageInterface
- Abstract class Phalcon\Validation\Validator
- Class Phalcon\Validation\Validator\Alnum
- Class Phalcon\Validation\Validator\Alpha
- Class Phalcon\Validation\Validator\Between
- Class Phalcon\Validation\Validator\Confirmation
- Class Phalcon\Validation\Validator\Digit
- Class Phalcon\Validation\Validator\Email
- Class Phalcon\Validation\Validator\ExclusionIn
- Class Phalcon\Validation\Validator\File
- Class Phalcon\Validation\Validator\Identical
- Class Phalcon\Validation\Validator\InclusionIn
- Class Phalcon\Validation\Validator\Numericality
- Class Phalcon\Validation\Validator\PresenceOf
- Class Phalcon\Validation\Validator\Regex
- Class Phalcon\Validation\Validator\StringLength
- Class Phalcon\Validation\Validator\Uniqueness
- Class Phalcon\Validation\Validator\Url
- Interface Phalcon\Validation\ValidatorInterface
- Class Phalcon\Version
- 參考手冊
- 安裝(Installation)
- 教程 1:讓我們通過例子來學習(Tutorial 1: Let’s learn by example)
- 教程 2:Introducing INVO(Tutorial 2: Introducing INVO)
- 教程 3: Securing INVO
- 教程 4: Using CRUDs
- 教程 5: Customizing INVO
- 教程 6: Vkuró
- 教程 7:創建簡單的 REST API(Tutorial 7: Creating a Simple REST API)
- 示例列表(List of examples)
- 依賴注入與服務定位器(Dependency Injection/Service Location)
- MVC 架構(The MVC Architecture)
- 使用控制器(Using Controllers)
- 使用模型(Working with Models)
- 模型元數據(Models Meta-Data)
- 事務管理(Model Transactions)
- Phalcon 查詢語言(Phalcon Query Language (PHQL))
- 緩存對象關系映射(Caching in the ORM)
- 對象文檔映射 ODM (Object-Document Mapper)
- 使用視圖(Using Views)
- 視圖助手(View Helpers)
- 資源文件管理(Assets Management)
- Volt 模版引擎(Volt: Template Engine)
- MVC 應用(MVC Applications)
- 路由(Routing)
- 調度控制器(Dispatching Controllers)
- 微應用(Micro Applications)
- 使用命名空間(Working with Namespaces)
- 事件管理器(Events Manager)
- Request Environment
- 返回響應(Returning Responses)
- Cookie 管理(Cookies Management)
- 生成 URL 和 路徑(Generating URLs and Paths)
- 閃存消息(Flashing Messages)
- 使用 Session 存儲數據(Storing data in Session)
- 過濾與清理(Filtering and Sanitizing)
- 上下文編碼(Contextual Escaping)
- 驗證(Validation)
- 表單(Forms)
- 讀取配置(Reading Configurations)
- 分頁(Pagination)
- 使用緩存提高性能(Improving Performance with Cache)
- 安全(Security)
- Encryption/Decryption
- 訪問控制列表 ACL(Access Control Lists ACL)
- 多語言支持(Multi-lingual Support)
- Universal Class Loader
- 日志記錄(Logging)
- 注釋解析器(Annotations Parser)
- 命令行應用(Command Line Applications)
- 隊列(Queueing)
- 數據庫抽象層(Database Abstraction Layer)
- 國際化(Internationalization)
- 數據庫遷移(Database Migrations)
- 調試應用程序(Debugging Applications)
- Phalcon 開發工具(Phalcon Developer Tools)
- 提高性能:下一步該做什么?(Increasing Performance: What’s next?)
- 單元測試(Unit testing)
- 授權(License)