55
Assetic Ismael Ambrosi 28 de Mayo, 2014

Assetic PHPmvd

Embed Size (px)

DESCRIPTION

Charla sobre Assetic presentada en la Meetup de PHP en Mayo 2014

Citation preview

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!