Top Banner
Assetic Ismael Ambrosi 28 de Mayo, 2014
55

Assetic PHPmvd

May 28, 2015

Download

Technology

Ismael Ambrosi

Charla sobre Assetic presentada en la Meetup de PHP en Mayo 2014
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Assetic PHPmvd

Assetic

Ismael Ambrosi 28 de Mayo, 2014

Page 2: Assetic PHPmvd

¿Quién Soy?

Ismael Ambrosi

@iambrosi

Frontend Developer en VividCortex

(Fanático de PHP)

Page 3: Assetic PHPmvd

¿Qué es Assetic?

Page 4: Assetic PHPmvd

https://github.com/kriswallsmith/assetic/blob/master/README.md#assetic

“Assetic is an asset management framework for PHP.”

Page 5: Assetic PHPmvd

Creado por Kris Wallsmith

@kriswallsmith

https://github.com/kriswallsmith/assetic

Page 6: Assetic PHPmvd

Inspirado en Python webassetshttp://elsdoerfer.name/docs/webassets/

Page 7: Assetic PHPmvd

Con Assetic puedo…

Page 8: Assetic PHPmvd

•Combinar archivos

Con Assetic puedo…

Page 9: Assetic PHPmvd

•Combinar archivos

•Aplicar filtros

Con Assetic puedo…

Page 10: Assetic PHPmvd

•Combinar archivos

•Aplicar filtros

•Generar archivos estáticos

Con Assetic puedo…

Page 11: Assetic PHPmvd

Cómo …?

Page 12: Assetic PHPmvd

Cómo …?

composer require “kriswallsmith/assetic:~1.1”

Page 13: Assetic PHPmvd

use Assetic\Asset\AssetCollection; use Assetic\Asset\FileAsset; use Assetic\Asset\GlobAsset; !$js = new AssetCollection(array( # Todos los archivos dentro de js/ new GlobAsset('/path/to/js/*'), ! # Un único archivo new FileAsset('/path/to/another.js'), )); !# Imprime en pantalla el resultado de la combinación echo $js->dump();

Cómo …?

https://github.com/kriswallsmith/assetic#assetic--

Page 14: Assetic PHPmvd

use Assetic\Asset\AssetCollection; use Assetic\Asset\FileAsset; use Assetic\Asset\GlobAsset; !$js = new AssetCollection(array( # Todos los archivos dentro de js/ new GlobAsset('/path/to/js/*'), ! # Un único archivo new FileAsset('/path/to/another.js'), )); !# Imprime en pantalla el resultado de la combinación echo $js->dump();

Cómo …?

Crea la colección de assets

Page 15: Assetic PHPmvd

use Assetic\Asset\AssetCollection; use Assetic\Asset\FileAsset; use Assetic\Asset\GlobAsset; !$js = new AssetCollection(array( # Todos los archivos dentro de js/ new GlobAsset('/path/to/js/*'), ! # Un único archivo new FileAsset('/path/to/another.js'), )); !# Imprime en pantalla el resultado de la combinación echo $js->dump();

Cómo …?

Con los assets a utilizar

Page 16: Assetic PHPmvd

use Assetic\Asset\AssetCollection; use Assetic\Asset\FileAsset; use Assetic\Asset\GlobAsset; !$js = new AssetCollection(array( # Todos los archivos dentro de js/ new GlobAsset('/path/to/js/*'), ! # Un único archivo new FileAsset('/path/to/another.js'), )); !# Imprime en pantalla el resultado de la combinación echo $js->dump();

Cómo …?

Muestra el resultado

Page 17: Assetic PHPmvd

Ejemplo

use Assetic\Asset\AssetCollection; use Assetic\Asset\FileAsset; use Assetic\Asset\GlobAsset; !$js = new AssetCollection(array( new FileAsset('vendor/jquery.js'), new GlobAsset('src/js/*'), )); !echo $js->dump();

Page 18: Assetic PHPmvd

FileAsset Carga el asset desde un archivo

GlobAsset Carga el/los assets desde un pattern

HttpAsset Carga el asset desde una URL

StringAsset Crea un asset desde un string :)

Tipos de assets

Page 19: Assetic PHPmvd

Filtros …?

Page 20: Assetic PHPmvd

Filtros …?

“Los filtros permiten manipular los assets”

https://github.com/kriswallsmith/assetic#filters

Page 21: Assetic PHPmvd

use Assetic\Asset\AssetCollection; use Assetic\Asset\FileAsset; use Assetic\Asset\GlobAsset; use Assetic\Filter\LessFilter; use Assetic\Filter\Yui; !$css = new AssetCollection(array( new FileAsset('/path/to/src/styles.less', array(new LessFilter())), new GlobAsset('/path/to/css/*'), ), array( new Yui\CssCompressorFilter('/path/to/yuicompressor.jar'), )); !# Imprime el resultado de la combinación # con la compresión de los estilos echo $css->dump();

Filtros …?

https://github.com/kriswallsmith/assetic#filters

Page 22: Assetic PHPmvd

use Assetic\Asset\AssetCollection; use Assetic\Asset\FileAsset; use Assetic\Asset\GlobAsset; use Assetic\Filter\LessFilter; use Assetic\Filter\Yui; !$css = new AssetCollection(array( new FileAsset('/path/to/src/styles.less', array(new LessFilter())), new GlobAsset('/path/to/css/*'), ), array( new Yui\CssCompressorFilter('/path/to/yuicompressor.jar'), )); !# Imprime el resultado de la combinación # con la compresión de los estilos echo $css->dump();

Filtros …?

Indica los filtros a aplicar al asset

Page 23: Assetic PHPmvd

use Assetic\Asset\AssetCollection; use Assetic\Asset\FileAsset; use Assetic\Asset\GlobAsset; use Assetic\Filter\LessFilter; use Assetic\Filter\Yui; !$css = new AssetCollection(array( new FileAsset('/path/to/src/styles.less', array(new LessFilter())), new GlobAsset('/path/to/css/*'), ), array( new Yui\CssCompressorFilter('/path/to/yuicompressor.jar'), )); !# Imprime el resultado de la combinación # con la compresión de los estilos echo $css->dump();

Filtros …?

Indico los filtros a aplicar a la colección

Page 24: Assetic PHPmvd

Filtros …?use Assetic\Asset\AssetCollection; use Assetic\Asset\FileAsset; use Assetic\Asset\GlobAsset; use Assetic\Filter\LessFilter; use Assetic\Filter\Yui; !$css = new AssetCollection(array( new FileAsset('/path/to/src/styles.less', array(new LessFilter())), new GlobAsset('/path/to/css/*'), ), array( new Yui\CssCompressorFilter('/path/to/yuicompressor.jar'), )); !# Imprime el resultado de la combinación # con la compresión de los estilos echo $css->dump();

Muestra el resultado

Page 25: Assetic PHPmvd

Tip

use Assetic\Asset\AssetCollection; !$css = new AssetCollection(array( # ... )); !foreach ($css as $leaf) { # Imprime el asset comprimido por YUI echo $leaf->dump(); }

Page 26: Assetic PHPmvd

CoffeeScriptFilter LessFilter LessphpFilter Sass\SassFilter Sass\ScssFilter

UglifyJs2Filter Yui\CssCompressorFilter Yui\JsCompressorFilter JpegoptimFilter OptiPngFilter

Algunos de los filtros que podemos utilizar

Page 27: Assetic PHPmvd

Archivos estáticos …?

Page 28: Assetic PHPmvd

https://github.com/kriswallsmith/assetic#filters

Archivos estáticos …?use Assetic\Asset\AssetCollection; use Assetic\AssetWriter; !$js = new AssetCollection(array( # ... )); !$writer = new AssetWriter('/path/to/web'); !# Genera el archivo $writer->writeAsset($js);

Page 29: Assetic PHPmvd

AssetManager

Page 30: Assetic PHPmvd

AssetManager

Me permite organizar mis assets

Page 31: Assetic PHPmvd

AssetManager

https://github.com/kriswallsmith/assetic#asset-manager

use Assetic\AssetManager; use Assetic\Asset\FileAsset; use Assetic\Asset\GlobAsset; !$am = new AssetManager(); $am->set('jquery', new FileAsset('/path/to/jquery.js')); $am->set('base_css', new GlobAsset('/path/to/css/*')); !# Agrego una colección $am->set('my_plugin', new AssetCollection(array( new AssetReference($am, 'jquery'), new FileAsset('/path/to/jquery.plugin.js'), )));

Page 32: Assetic PHPmvd

AssetManager

$am->get('jquery')->dump();

https://github.com/kriswallsmith/assetic#asset-manager

Page 33: Assetic PHPmvd

FilterManager

Page 34: Assetic PHPmvd

FilterManager

Me permite organizar mis filtros

Page 35: Assetic PHPmvd

FilterManager

https://github.com/kriswallsmith/assetic#filter-manager

use Assetic\FilterManager; use Assetic\Filter\Sass\SassFilter; use Assetic\Filter\Yui; !$fm = new FilterManager(); $fm->set('sass', new SassFilter(‘/path/to/parser/sass')); !$fm->set( 'yui_css', new Yui\CssCompressorFilter(‘/path/to/yuicompressor.jar') );

Page 36: Assetic PHPmvd

FilterManager

https://github.com/kriswallsmith/assetic#filter-manager

$fm->get('yui_css');

Page 37: Assetic PHPmvd

¿Y que puedo hacer con estos managers?

Page 38: Assetic PHPmvd

¡Mucho!

Page 39: Assetic PHPmvd

Ejemplo

<script src="/assets?name=login-scripts"></script> !<link href="/assets?name=login-styles" type="text/css" rel="stylesheet" />

Page 40: Assetic PHPmvd

Ejemplo fancy :)

<script src="/assets/login-scripts"></script> !<link href="/assets/login-styles" type="text/css" rel="stylesheet" />

Page 41: Assetic PHPmvd

Archivos estáticos …?

https://github.com/kriswallsmith/assetic#dumping-assets-to-static-files

use Assetic\AssetManager; use Assetic\AssetWriter; !$am = new AssetManager(); # ... !$writer = new AssetWriter('/path/to/web'); !# Genera el archivo $writer->writeManagerAssets($am);

Page 42: Assetic PHPmvd

AssetFactory

Page 43: Assetic PHPmvd

AssetFactory

https://github.com/kriswallsmith/assetic#asset-factory

Simplifica la creación de assets y el uso de los filtros.

Page 44: Assetic PHPmvd

AssetFactory

https://github.com/kriswallsmith/assetic#asset-factory

use Assetic\Factory\AssetFactory; !$factory = new AssetFactory('/path/to/asset/directory/'); $factory->setAssetManager($am); $factory->setFilterManager($fm); !$css = $factory->createAsset(array( # Carga el asset “reset” desde el asset manager '@reset', 'css/src/*.scss', ), array( 'scss', ! # No utiliza el filtro en modo debug '?yui_css', )); !echo $css->dump();

Page 45: Assetic PHPmvd

AssetFactory

https://github.com/kriswallsmith/assetic#asset-factory

use Assetic\Factory\AssetFactory; !$factory = new AssetFactory('/path/to/asset/directory/'); $factory->setAssetManager($am); $factory->setFilterManager($fm); !$css = $factory->createAsset(array( # Carga el asset “reset” desde el asset manager '@reset', 'css/src/*.scss', ), array( 'scss', ! # No utiliza el filtro en modo debug '?yui_css', )); !echo $css->dump();

Se instancia con un directorio base

Page 46: Assetic PHPmvd

AssetFactory

https://github.com/kriswallsmith/assetic#asset-factory

use Assetic\Factory\AssetFactory; !$factory = new AssetFactory('/path/to/asset/directory/'); $factory->setAssetManager($am); $factory->setFilterManager($fm); !$css = $factory->createAsset(array( # Carga el asset “reset” desde el asset manager '@reset', 'css/src/*.scss', ), array( 'scss', ! # No utiliza el filtro en modo debug '?yui_css', )); !echo $css->dump();

Configura los managers

Page 47: Assetic PHPmvd

AssetFactory

https://github.com/kriswallsmith/assetic#asset-factory

use Assetic\Factory\AssetFactory; !$factory = new AssetFactory('/path/to/asset/directory/'); $factory->setAssetManager($am); $factory->setFilterManager($fm); !$css = $factory->createAsset(array( # Carga el asset “reset” desde el asset manager '@reset', 'css/src/*.scss', ), array( 'scss', ! # No utiliza el filtro en modo debug '?yui_css', )); !echo $css->dump();

Assets

Page 48: Assetic PHPmvd

AssetFactory

https://github.com/kriswallsmith/assetic#asset-factory

use Assetic\Factory\AssetFactory; !$factory = new AssetFactory('/path/to/asset/directory/'); $factory->setAssetManager($am); $factory->setFilterManager($fm); !$css = $factory->createAsset(array( # Carga el asset “reset” desde el asset manager '@reset', 'css/src/*.scss', ), array( 'scss', ! # No utiliza el filtro en modo debug '?yui_css', )); !echo $css->dump();

Filtros

Page 49: Assetic PHPmvd

use Assetic\Factory\AssetFactory; !$factory = new AssetFactory('/path/to/asset/directory/'); $factory->setAssetManager($am); $factory->setFilterManager($fm); !$css = $factory->createAsset(array( # Carga el asset “reset” desde el asset manager '@reset', 'css/src/*.scss', ), array( 'scss', ! # No utiliza el filtro en modo debug '?yui_css', )); !echo $css->dump();

AssetFactory

http://www.thumbresources.org/wp-content/uploads/2012/10/thumb-resources.jpg

Page 50: Assetic PHPmvd

AssetFactory

https://github.com/kriswallsmith/assetic#asset-factory

use Assetic\Factory\AssetFactory; !$factory = new AssetFactory('/path/to/asset/directory/'); $factory->setAssetManager($am); $factory->setFilterManager($fm); !$css = $factory->createAsset(array( # Carga el asset “reset” desde el asset manager '@reset', 'css/src/*.scss', ), array( 'scss', ! # No utiliza el filtro en modo debug '?yui_css', )); !echo $css->dump(); Muestra el resultado

Page 51: Assetic PHPmvd

Symfony Incluido por defecto en la versión standard

Zend Framework 2 https://github.com/widmogrod/zf2-assetic-module/

Laravel https://github.com/barryvdh/laravel-assetic https://github.com/slushie/laravel-assetic

Integración con Frameworks

Page 52: Assetic PHPmvd

Twig

$twig->addExtension(new AsseticExtension($factory));

{% stylesheets ‘/path/to/less/*' filter='less'%} <link href="{{ asset_url }}" type="text/css" rel="stylesheet" /> {% endstylesheets %} !{% javascripts '/path/to/js/*' %} <script type="text/javascript" src="{{ asset_url }}"></script> {% endjavascripts %}

Page 53: Assetic PHPmvd

Links

https://github.com/kriswallsmith/assetic https://packagist.org/packages/kriswallsmith/assetic

Page 54: Assetic PHPmvd

¿Preguntas?

Page 55: Assetic PHPmvd

¡Gracias!