Symfony: Domesticando las Vistas - decharlas
Upcoming SlideShare
Loading in...5
×
 

Like this? Share it with your network

Share

Symfony: Domesticando las Vistas - decharlas

on

  • 2,966 views

José Antonio Pío explicó que pasa en Symfony desque se producen un petición hasta que ésta se sirve en el navegador. (decharlas.com)

José Antonio Pío explicó que pasa en Symfony desque se producen un petición hasta que ésta se sirve en el navegador. (decharlas.com)

Statistics

Views

Total Views
2,966
Views on SlideShare
2,911
Embed Views
55

Actions

Likes
2
Downloads
90
Comments
0

2 Embeds 55

http://www.dcastello.com 54
http://www.sfexception.com 1

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment
  • Mejoras que intenta aportar: Es mejor utilizar un pie de página en vez de una cabecera, para dejar libre la parte superior de cada transparencia. El pie de página incluye una vez más publicidad de decharlas.com
  • Mejoras que intenta aportar: Es mejor utilizar un pie de página en vez de una cabecera, para dejar libre la parte superior de cada transparencia. El pie de página incluye una vez más publicidad de decharlas.com
  • Mejoras que intenta aportar: Es mejor utilizar un pie de página en vez de una cabecera, para dejar libre la parte superior de cada transparencia. El pie de página incluye una vez más publicidad de decharlas.com
  • Mejoras que intenta aportar: Es mejor utilizar un pie de página en vez de una cabecera, para dejar libre la parte superior de cada transparencia. El pie de página incluye una vez más publicidad de decharlas.com
  • Mejoras que intenta aportar: Es mejor utilizar un pie de página en vez de una cabecera, para dejar libre la parte superior de cada transparencia. El pie de página incluye una vez más publicidad de decharlas.com
  • Mejoras que intenta aportar: Es mejor utilizar un pie de página en vez de una cabecera, para dejar libre la parte superior de cada transparencia. El pie de página incluye una vez más publicidad de decharlas.com
  • Mejoras que intenta aportar: Es mejor utilizar un pie de página en vez de una cabecera, para dejar libre la parte superior de cada transparencia. El pie de página incluye una vez más publicidad de decharlas.com
  • Mejoras que intenta aportar: Es mejor utilizar un pie de página en vez de una cabecera, para dejar libre la parte superior de cada transparencia. El pie de página incluye una vez más publicidad de decharlas.com
  • Mejoras que intenta aportar: Es mejor utilizar un pie de página en vez de una cabecera, para dejar libre la parte superior de cada transparencia. El pie de página incluye una vez más publicidad de decharlas.com
  • Mejoras que intenta aportar: Es mejor utilizar un pie de página en vez de una cabecera, para dejar libre la parte superior de cada transparencia. El pie de página incluye una vez más publicidad de decharlas.com
  • Mejoras que intenta aportar: Es mejor utilizar un pie de página en vez de una cabecera, para dejar libre la parte superior de cada transparencia. El pie de página incluye una vez más publicidad de decharlas.com
  • Mejoras que intenta aportar: Es mejor utilizar un pie de página en vez de una cabecera, para dejar libre la parte superior de cada transparencia. El pie de página incluye una vez más publicidad de decharlas.com
  • Mejoras que intenta aportar: Es mejor utilizar un pie de página en vez de una cabecera, para dejar libre la parte superior de cada transparencia. El pie de página incluye una vez más publicidad de decharlas.com
  • Mejoras que intenta aportar: Es mejor utilizar un pie de página en vez de una cabecera, para dejar libre la parte superior de cada transparencia. El pie de página incluye una vez más publicidad de decharlas.com
  • Mejoras que intenta aportar: Es mejor utilizar un pie de página en vez de una cabecera, para dejar libre la parte superior de cada transparencia. El pie de página incluye una vez más publicidad de decharlas.com
  • Mejoras que intenta aportar: Es mejor utilizar un pie de página en vez de una cabecera, para dejar libre la parte superior de cada transparencia. El pie de página incluye una vez más publicidad de decharlas.com
  • Mejoras que intenta aportar: Es mejor utilizar un pie de página en vez de una cabecera, para dejar libre la parte superior de cada transparencia. El pie de página incluye una vez más publicidad de decharlas.com
  • Mejoras que intenta aportar: Es mejor utilizar un pie de página en vez de una cabecera, para dejar libre la parte superior de cada transparencia. El pie de página incluye una vez más publicidad de decharlas.com
  • Mejoras que intenta aportar: Es mejor utilizar un pie de página en vez de una cabecera, para dejar libre la parte superior de cada transparencia. El pie de página incluye una vez más publicidad de decharlas.com
  • Mejoras que intenta aportar: Es mejor utilizar un pie de página en vez de una cabecera, para dejar libre la parte superior de cada transparencia. El pie de página incluye una vez más publicidad de decharlas.com
  • Mejoras que intenta aportar: Es mejor utilizar un pie de página en vez de una cabecera, para dejar libre la parte superior de cada transparencia. El pie de página incluye una vez más publicidad de decharlas.com
  • Mejoras que intenta aportar: Es mejor utilizar un pie de página en vez de una cabecera, para dejar libre la parte superior de cada transparencia. El pie de página incluye una vez más publicidad de decharlas.com
  • Mejoras que intenta aportar: Es mejor utilizar un pie de página en vez de una cabecera, para dejar libre la parte superior de cada transparencia. El pie de página incluye una vez más publicidad de decharlas.com
  • Mejoras que intenta aportar: Es mejor utilizar un pie de página en vez de una cabecera, para dejar libre la parte superior de cada transparencia. El pie de página incluye una vez más publicidad de decharlas.com
  • Mejoras que intenta aportar: Es mejor utilizar un pie de página en vez de una cabecera, para dejar libre la parte superior de cada transparencia. El pie de página incluye una vez más publicidad de decharlas.com
  • Mejoras que intenta aportar: Es mejor utilizar un pie de página en vez de una cabecera, para dejar libre la parte superior de cada transparencia. El pie de página incluye una vez más publicidad de decharlas.com
  • Mejoras que intenta aportar: Es mejor utilizar un pie de página en vez de una cabecera, para dejar libre la parte superior de cada transparencia. El pie de página incluye una vez más publicidad de decharlas.com
  • Mejoras que intenta aportar: Es mejor utilizar un pie de página en vez de una cabecera, para dejar libre la parte superior de cada transparencia. El pie de página incluye una vez más publicidad de decharlas.com
  • Mejoras que intenta aportar: Es mejor utilizar un pie de página en vez de una cabecera, para dejar libre la parte superior de cada transparencia. El pie de página incluye una vez más publicidad de decharlas.com
  • Mejoras que intenta aportar: Es mejor utilizar un pie de página en vez de una cabecera, para dejar libre la parte superior de cada transparencia. El pie de página incluye una vez más publicidad de decharlas.com
  • Mejoras que intenta aportar: Es mejor utilizar un pie de página en vez de una cabecera, para dejar libre la parte superior de cada transparencia. El pie de página incluye una vez más publicidad de decharlas.com
  • Mejoras que intenta aportar: Es mejor utilizar un pie de página en vez de una cabecera, para dejar libre la parte superior de cada transparencia. El pie de página incluye una vez más publicidad de decharlas.com
  • Mejoras que intenta aportar: Es mejor utilizar un pie de página en vez de una cabecera, para dejar libre la parte superior de cada transparencia. El pie de página incluye una vez más publicidad de decharlas.com
  • Mejoras que intenta aportar: Es mejor utilizar un pie de página en vez de una cabecera, para dejar libre la parte superior de cada transparencia. El pie de página incluye una vez más publicidad de decharlas.com
  • Mejoras que intenta aportar: Es mejor utilizar un pie de página en vez de una cabecera, para dejar libre la parte superior de cada transparencia. El pie de página incluye una vez más publicidad de decharlas.com
  • Mejoras que intenta aportar: Es mejor utilizar un pie de página en vez de una cabecera, para dejar libre la parte superior de cada transparencia. El pie de página incluye una vez más publicidad de decharlas.com
  • Mejoras que intenta aportar: Es mejor utilizar un pie de página en vez de una cabecera, para dejar libre la parte superior de cada transparencia. El pie de página incluye una vez más publicidad de decharlas.com
  • Mejoras que intenta aportar: Es mejor utilizar un pie de página en vez de una cabecera, para dejar libre la parte superior de cada transparencia. El pie de página incluye una vez más publicidad de decharlas.com
  • Mejoras que intenta aportar: Es mejor utilizar un pie de página en vez de una cabecera, para dejar libre la parte superior de cada transparencia. El pie de página incluye una vez más publicidad de decharlas.com
  • Mejoras que intenta aportar: Es mejor utilizar un pie de página en vez de una cabecera, para dejar libre la parte superior de cada transparencia. El pie de página incluye una vez más publicidad de decharlas.com
  • Mejoras que intenta aportar: Es mejor utilizar un pie de página en vez de una cabecera, para dejar libre la parte superior de cada transparencia. El pie de página incluye una vez más publicidad de decharlas.com
  • Mejoras que intenta aportar: Es mejor utilizar un pie de página en vez de una cabecera, para dejar libre la parte superior de cada transparencia. El pie de página incluye una vez más publicidad de decharlas.com
  • Mejoras que intenta aportar: Es mejor utilizar un pie de página en vez de una cabecera, para dejar libre la parte superior de cada transparencia. El pie de página incluye una vez más publicidad de decharlas.com
  • Mejoras que intenta aportar: Es mejor utilizar un pie de página en vez de una cabecera, para dejar libre la parte superior de cada transparencia. El pie de página incluye una vez más publicidad de decharlas.com
  • Mejoras que intenta aportar: Es mejor utilizar un pie de página en vez de una cabecera, para dejar libre la parte superior de cada transparencia. El pie de página incluye una vez más publicidad de decharlas.com
  • Mejoras que intenta aportar: Es mejor utilizar un pie de página en vez de una cabecera, para dejar libre la parte superior de cada transparencia. El pie de página incluye una vez más publicidad de decharlas.com
  • Mejoras que intenta aportar: Es mejor utilizar un pie de página en vez de una cabecera, para dejar libre la parte superior de cada transparencia. El pie de página incluye una vez más publicidad de decharlas.com
  • Mejoras que intenta aportar: Es mejor utilizar un pie de página en vez de una cabecera, para dejar libre la parte superior de cada transparencia. El pie de página incluye una vez más publicidad de decharlas.com
  • Mejoras que intenta aportar: Es mejor utilizar un pie de página en vez de una cabecera, para dejar libre la parte superior de cada transparencia. El pie de página incluye una vez más publicidad de decharlas.com
  • Mejoras que intenta aportar: Es mejor utilizar un pie de página en vez de una cabecera, para dejar libre la parte superior de cada transparencia. El pie de página incluye una vez más publicidad de decharlas.com
  • Mejoras que intenta aportar: Es mejor utilizar un pie de página en vez de una cabecera, para dejar libre la parte superior de cada transparencia. El pie de página incluye una vez más publicidad de decharlas.com
  • Mejoras que intenta aportar: Es mejor utilizar un pie de página en vez de una cabecera, para dejar libre la parte superior de cada transparencia. El pie de página incluye una vez más publicidad de decharlas.com
  • Mejoras que intenta aportar: Es mejor utilizar un pie de página en vez de una cabecera, para dejar libre la parte superior de cada transparencia. El pie de página incluye una vez más publicidad de decharlas.com
  • Mejoras que intenta aportar: Es mejor utilizar un pie de página en vez de una cabecera, para dejar libre la parte superior de cada transparencia. El pie de página incluye una vez más publicidad de decharlas.com
  • Mejoras que intenta aportar: Es mejor utilizar un pie de página en vez de una cabecera, para dejar libre la parte superior de cada transparencia. El pie de página incluye una vez más publicidad de decharlas.com
  • Mejoras que intenta aportar: Es mejor utilizar un pie de página en vez de una cabecera, para dejar libre la parte superior de cada transparencia. El pie de página incluye una vez más publicidad de decharlas.com
  • Mejoras que intenta aportar: Es mejor utilizar un pie de página en vez de una cabecera, para dejar libre la parte superior de cada transparencia. El pie de página incluye una vez más publicidad de decharlas.com
  • Mejoras que intenta aportar: Es mejor utilizar un pie de página en vez de una cabecera, para dejar libre la parte superior de cada transparencia. El pie de página incluye una vez más publicidad de decharlas.com
  • Mejoras que intenta aportar: Es mejor utilizar un pie de página en vez de una cabecera, para dejar libre la parte superior de cada transparencia. El pie de página incluye una vez más publicidad de decharlas.com
  • Mejoras que intenta aportar: Es mejor utilizar un pie de página en vez de una cabecera, para dejar libre la parte superior de cada transparencia. El pie de página incluye una vez más publicidad de decharlas.com
  • Mejoras que intenta aportar: Es mejor utilizar un pie de página en vez de una cabecera, para dejar libre la parte superior de cada transparencia. El pie de página incluye una vez más publicidad de decharlas.com
  • Mejoras que intenta aportar: Es mejor utilizar un pie de página en vez de una cabecera, para dejar libre la parte superior de cada transparencia. El pie de página incluye una vez más publicidad de decharlas.com
  • Mejoras que intenta aportar: Es mejor utilizar un pie de página en vez de una cabecera, para dejar libre la parte superior de cada transparencia. El pie de página incluye una vez más publicidad de decharlas.com
  • Mejoras que intenta aportar: Es mejor utilizar un pie de página en vez de una cabecera, para dejar libre la parte superior de cada transparencia. El pie de página incluye una vez más publicidad de decharlas.com
  • Mejoras que intenta aportar: Es mejor utilizar un pie de página en vez de una cabecera, para dejar libre la parte superior de cada transparencia. El pie de página incluye una vez más publicidad de decharlas.com
  • Mejoras que intenta aportar: Es mejor utilizar un pie de página en vez de una cabecera, para dejar libre la parte superior de cada transparencia. El pie de página incluye una vez más publicidad de decharlas.com
  • Mejoras que intenta aportar: Es mejor utilizar un pie de página en vez de una cabecera, para dejar libre la parte superior de cada transparencia. El pie de página incluye una vez más publicidad de decharlas.com
  • Mejoras que intenta aportar: Es mejor utilizar un pie de página en vez de una cabecera, para dejar libre la parte superior de cada transparencia. El pie de página incluye una vez más publicidad de decharlas.com

Symfony: Domesticando las Vistas - decharlas Presentation Transcript

  • 1. Castellón - 5 y 6 de Julio 2010 – Universitat Jaume I organizan patrocinan colaboran Jornadas Symfony 5 y 6 de julio 2010 Universitat Jaume I, Castellón http://decharlas.uji.es/symfony
  • 2. tr Jornadas Symfony http://decharlas.uji.es/symfony Jornadas Symfony http://decharlas.uji.es/symfony hacemos Webs!
  • 3. Jornadas Symfony 5 y 6 de julio 2010 Universitat Jaume I, Castellón http://decharlas.uji.es/symfony Domesticando las vistas de symfony Jose Antonio Pio Acilia.es
  • 4. Jornadas Symfony http://decharlas.uji.es/symfony Presentación CTO Acilia Internet Madrid Jornadas Symfony http://decharlas.uji.es/symfony Background + Estudie Ingeniería Electrónica + Empece a trabajar con internet en el 2001... y aquí sigo. + PHP y Ruby + CakePHP, Rails, CodeIgniter y Symfony 1.2 - 1.4
  • 5. Jornadas Symfony http://decharlas.uji.es/symfony Presentación Proyectos con Symfony Jornadas Symfony http://decharlas.uji.es/symfony
  • 6. Jornadas Symfony http://decharlas.uji.es/symfony Presentación Proyectos con Symfony Jornadas Symfony http://decharlas.uji.es/symfony notodohoteles.com, quiniela15.com (cache) CondeNast - Profesional Vogue GQ
  • 7. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas Symfony http://decharlas.uji.es/symfony Domesticando las Vistas Contenido
  • 8. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas Symfony http://decharlas.uji.es/symfony Contenido Los Templates + MVC + Templates + Layout + Variables del Template + Fragmentos de código (Partials, Components, Slots) + Configuración del Layout + Accesso al Objeto Response + Conversión de Variables de vista + Respuestas del Action
  • 9. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas Symfony http://decharlas.uji.es/symfony Contenido Procesando las Vistas + Cadena de Ejecución + Cambiando la clase de Vista + Las Clases + sfPHPView Class
  • 10. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas Symfony http://decharlas.uji.es/symfony Los Templates
  • 11. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas Symfony http://decharlas.uji.es/symfony Como empezó todo Pues con un MVC
  • 12. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas Symfony http://decharlas.uji.es/symfony MVC Request Controller Response Model Views
  • 13. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas Symfony http://decharlas.uji.es/symfony Templates apps/frontend/modules/ moduleName / templates /archivos.php
  • 14. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas Symfony http://decharlas.uji.es/symfony Templates <?php use_helper( 'I18N' , 'Date' ) ?> <?php include_partial( 'attribute/assets' ) ?> < div id = &quot;sf_admin_container&quot; class = &quot;tab_sf_admin_container_attributes&quot; > < h1 > <?php echo __( 'Attribute List' , array (), 'messages' ) ?> </ h1 > < ul > < li >< a href = &quot;#sf_admin_content_list&quot; > <?php echo __( &quot;Categories&quot; ) ?> </ a ></ li > </ ul > < div id = &quot;sf_admin_content_list&quot; > <?php include_partial( 'attribute/flashes' ) ?> </ div > </ div > < script type = &quot;text/javascript&quot; > //Algo de Javascript </ script >
  • 15. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas Symfony http://decharlas.uji.es/symfony Templates Helpers <?php use_helper( 'I18N' , 'Date' ) ?> <?php use_helper( 'HelperName' ) ?> <?php use_helper( 'HelperName1' , 'HelperName2' , 'HelperName3' ) ?> <?php echo __( 'Attribute List' , array (), 'messages' ) ?> <?php include_partial( 'attribute/flashes' ) ?> <?php echo url_for( &quot;attribute/list?parent_id=0&page=1&quot; ) ?>
  • 16. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas Symfony http://decharlas.uji.es/symfony Templates Helpers de Symfony AssetHelper CacheHelper DateHelper EscapingHelper HelperHelper I18NHelper JavascriptBaseHelper NumberHelper PartialHelper TagHelper TextHelper UrlHelper http://www.symfony-project.org/api/1_4/helper use_helper( $date ) include_http_metas() include_metas() include_title() include_stylesheets() include_javascripts() include_partial ( $templateName , $vars ) format_date( $date , $format , $culture , $charset ) link_to( __( &quot;Signout&quot; ), url_for( '@sf_guard_signout' ) ) url_for( &quot;@attribute_attribute_new?parent_id= { $parent_id } &quot; )
  • 17. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas Symfony http://decharlas.uji.es/symfony Templates Helpers Propios apps/frontend/lib/helper/NombreHelper.php <?php function previewObject( $object ) { } <?php use_helper( 'Nombre' ) ?> ... <?php echo previewObject( $object ) ?>
  • 18. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas Symfony http://decharlas.uji.es/symfony Layout
  • 19. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas Symfony http://decharlas.uji.es/symfony Layout apps/frontend/ templates /layout.php Layout Template <! DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot; > < html xmlns = &quot;http://www.w3.org/1999/xhtml&quot; > < head > < meta http-equiv = &quot;content-type&quot; content = &quot;text/html; charset=utf-8&quot; /> <?php include_http_metas() ?> <?php include_metas() ?> <?php include_title() ?> < link rel = &quot;shortcut icon&quot; href = &quot;/favicon.ico&quot; /> <?php include_stylesheets() ?> <?php include_javascripts() ?> </ head > < body > < div id = &quot;wrapper&quot; > <?php echo $sf_content ?> </ div > </ body > </ html >
  • 20. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas Symfony http://decharlas.uji.es/symfony Variables del Template
  • 21. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas Symfony http://decharlas.uji.es/symfony Variables del Template array ( 0 => 'sf_data', 1 => 'sf_type', 2 => 'sf_context', 3 => 'sf_request', 4 => 'sf_params', 5 => 'sf_response', 6 => 'sf_user', ) + $sf_data: Variables de la acción (Escapadas) + $sf_type: Tipo de Template que se está procesando (action, partial, layout) + $sf_context: la instancia de sfContext + $sf_request: El objeto Request (sfWebRequest) + $sf_params : Los parámetros pasados al objeto Request + $sf_response: El objeto Response (sfWebResponse) + $sf_user : El usuario actual
  • 22. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas Symfony http://decharlas.uji.es/symfony Fragmentos de códigos
  • 23. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas Symfony http://decharlas.uji.es/symfony Fragmentos de códigos Parcial + Inserta contenido con las variables especificadas en la llamada al helper. + Se usa extensivamente en el admin generator. + Tiene acceso limitado a las variables de la vista. (se puede hackear) Components + Contienen lógica de acción. Extiende la clase sfComponents. + Separa la lógica de presentación en partes. + Se pueden incluir en cualquier nivel de la definición de la vista: Layout, Templates, Components, Partials. Slots + Se usan para rellenar espacios con contenido dinámico. + Tiene acceso a las variables del template. + Se incluye despues de que se construye la vista.
  • 24. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas Symfony http://decharlas.uji.es/symfony Partials
  • 25. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas Symfony http://decharlas.uji.es/symfony Fragmentos de códigos Parcial public function executeIndex(sfWebRequest $request ){ $this ->variable = “Hola Mundo”; } apps/frontend/modules/moduleName/actions/ actions.class.php apps/frontend/modules/moduleName/templates/ indexSuccess.php < div id = &quot;sf_admin_content&quot; > <?php include_partial( 'moduleName/myPartial' , array ( 'variable' => $variable ) ) ?> </ div >
  • 26. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas Symfony http://decharlas.uji.es/symfony Fragmentos de códigos Parcial < div id = &quot;sf_admin_container&quot; > < h1 > <?php echo $variable ?> </ h1 > </ div > apps/frontend/modules/moduleName/templates/ _myPartial.php
  • 27. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas Symfony http://decharlas.uji.es/symfony Components
  • 28. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas Symfony http://decharlas.uji.es/symfony Fragmentos de códigos Components class muduleNameComponents extends sfComponents{ public function executeTopRSS(sfWebRequest $request ){ $this ->external_RSS = new RSSConnect::fetch ( $date ); } } < h1 > Top RSS </ h1 > <?php foreach ( $external_RSS as $rss ): ?> < div class = &quot;rss_box&quot; > < div class = &quot;rss_title&quot; > <?php echo $rss ->title ?> </ div > </ div > <?php endforeach ; ?> apps/frontend/modules/moduleName/actions/ components.class.php apps/frontend/modules/moduleName/templates/ _topRSS.php
  • 29. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas Symfony http://decharlas.uji.es/symfony <?php use_helper( 'I18N' , 'Date' ) ?> <?php include_partial( 'attribute/assets' ) ?> < div id = &quot;sf_admin_container&quot; class = &quot;tab_sf_admin_container_attributes&quot; > < h1 > <?php echo __( 'Attribute List' , array (), 'messages' ) ?> </ h1 > < ul > < li >< a href = &quot;#sf_admin_content_list&quot; > <?php echo __( &quot;Categories&quot; ) ?> </ a ></ li > </ ul > < div id = &quot;sf_admin_content_list&quot; > <?php include_partial( 'attribute/flashes' ) ?> <?php include_component( 'moduleName' , 'topRSS' , array ( 'rssCount' => $external_RSS ->count() ) ) ?> </ div > </ div > Components Fragmentos de códigos apps/frontend/modules/ otherModuleName /templates/ indexSuccess.php
  • 30. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas Symfony http://decharlas.uji.es/symfony Slots
  • 31. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas Symfony http://decharlas.uji.es/symfony Fragmentos de códigos Slots apps/frontend/templates/ layout.php <! DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot; > < html xmlns = &quot;http://www.w3.org/1999/xhtml&quot; > < head ></ head > < body > < div id = &quot;content&quot; > < div class = &quot;header&quot; > < div class = &quot;logo&quot; > <?php echo link_to( image_tag( &quot;/images/logo.png&quot; ), &quot;/&quot; ) ?> </ div > <?php if (has_slot( 'virtual_logo' )): ?> < div class = &quot;logo_virtual&quot; > <?php include_slot( 'virtual_logo' ) ?> </ div > <?php else : ?> </ div > <?php echo $sf_content ?> </ div > </ body > </ html >
  • 32. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas Symfony http://decharlas.uji.es/symfony Fragmentos de códigos class companyActions extends sfActions{ public function executeShow(sfWebRequest $request ){ ... $this ->company = Doctrine::getTable(“Company”)->find( $id ); } } apps/frontend/modules/ company /actions/ actions.class.php apps/frontend/modules/ company /templates/ showSuccess.php Slots < div class = &quot;company&quot; > <?php if ( $company ->hasLogo() ): ?> <?php slot( 'virtual_logo' ) ?> <?php echo $company ->renderLogo() ?> <?php end_slot() ?> <?php endif ; ?> </ div >
  • 33. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas Symfony http://decharlas.uji.es/symfony Configuración del Layout
  • 34. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas Symfony http://decharlas.uji.es/symfony default : http_metas : content-type : text/html metas : title : My Project Title description : My project Description keywords : Keywords, Project, Etc language : en robots : index, follow stylesheets : [/stylesheets/style.css] javascripts : [ /javascripts/jquery-1.3.min.js, ... ] has_layout : on layout : layout apps/frontend/config/ view.yml Configuración del Layout
  • 35. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas Symfony http://decharlas.uji.es/symfony all : … showSuccess : metas : title : Company Show description : Company Show keywords : Companies, Company Show language : en robots : index, follow stylesheets : [/stylesheets/style.css, /css/company.css ] javascripts : [ /javascripts/jquery-1.3.min.js, ... ] has_layout : on layout : company apps/frontend/modules/ company /config/ view.yml Configuración del Layout
  • 36. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas Symfony http://decharlas.uji.es/symfony Acceso al objeto Response
  • 37. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas Symfony http://decharlas.uji.es/symfony Acceso al objeto Response public function executeShow(sfWebRequest $request ) { . .. $response = $this ->getResponse(); // Metas and page headers $response = $this ->getResponse(); if (! $this ->article->isMainDomain( $domain )){ $response ->addMeta( 'robots' , 'noindex, nofollow' ); } $response ->addMeta( 'keywords' , $this ->article->getMetaKeywords() ); $response ->addMeta( 'description' , $this ->article- >getMetaDescription( &quot;sub_title&quot; ) ); if ( $this ->article->html_meta_title){ $response ->setTitle(trim( $this ->article->html_meta_title). &quot; | { $domain ->name} &quot; ); } else { $response ->setTitle(trim( $this ->article->getTitle()). &quot; | { $domain ->name} &quot; ); } $response ->addStyleSheet( 'article' ); $response ->addJavaScript( 'article.js' ); }
  • 38. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas Symfony http://decharlas.uji.es/symfony Acceso al objeto Response array ( 0 => '__call', 1 => '__construct', 2 => 'addCacheControlHttpHeader', 3 => 'addHttpMeta', 4 => 'addJavascript', 5 => 'addMeta', 6 => 'addStylesheet', 7 => 'addVaryHttpHeader', 8 => 'clearHttpHeaders', 9 => 'copyProperties', 10 => 'getCharset', 11 => 'getContent', 12 => 'getContentType', 13 => 'getCookies', 14 => 'getDate', 15 => 'getHttpHeader', 16 => 'getHttpHeaders', 17 => 'getHttpMetas', 18 => 'getJavascripts', 19 => 'getMetas', 20 => 'getOptions', 21 => 'getPositions', 22 => 'getSlots', 23 => 'getStatusCode', 24 => 'getStatusText', 25 => 'getStylesheets', 26 => 'getTitle', 27 => 'hasHttpHeader', 28 => 'initialize', 29 => 'isHeaderOnly', 30 => 'merge', 31 => 'removeJavascript', 32 => 'removeStylesheet', 33 => 'send', 34 => 'sendContent', 35 => 'sendHttpHeaders', 36 => 'serialize', 37 => 'setContent', 38 => 'setContentType', 39 => 'setCookie', 40 => 'setEventDispatcher', 41 => 'setHeaderOnly', 42 => 'setHttpHeader', 43 => 'setSlot', 44 => 'setStatusCode', 45 => 'setTitle', 46 => 'unserialize', )
  • 39. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas Symfony http://decharlas.uji.es/symfony Conversión de variables de vista Escaping Output
  • 40. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas Symfony http://decharlas.uji.es/symfony Escaping Output Conversión de variables de vista all : .settings : # Output escaping settings escaping_strategy : true escaping_method : ESC_SPECIALCHARS ## ESC_RAW, ESC_ENTITIES, ESC_JS, ESC_JS_NO_ENTITIES, and ESC_SPECIALCHARS. apps/frontend/config/settings.yml <?php echo $sf_data ->getRaw( 'image' )->tag( 320 , 480 ); ?> <?php echo $image ->getRawValue()->tag( 320 , 480 ) ; ?> <?php echo $sf_data ->get( 'image' )->name; ?> <?php echo $image ->name ; ?> apps/frontend/modules/moduleName/templates/algunTemplate.php
  • 41. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas Symfony http://decharlas.uji.es/symfony Escaping Output Conversión de variables de vista <?php echo get_class( $test_array ) ?> < span > sfOutputEscaperArrayDecorator </ span > <?php echo get_class( $test_object ) ?> < span > sfOutputEscaperObjectDecorator </ span >
  • 42. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas Symfony http://decharlas.uji.es/symfony Escaping Output Conversión de variables de vista array ( 0 => '__call', 1 => '__construct', 2 => '__get', 3 => '__toString', 4 => 'count', 5 => 'current', 6 => 'escape', 7 => 'get', 8 => 'getRaw', 9 => 'getRawValue', 10 => 'isClassMarkedAsSafe', 11 => 'key', 12 => 'markClassAsSafe', 13 => 'markClassesAsSafe', 14 => 'next', 15 => 'offsetExists', 16 => 'offsetGet', 17 => 'offsetSet', 18 => 'offsetUnset', 19 => 'rewind', 20 => 'unescape', 21 => 'valid', ) array ( 0 => '__construct', 1 => '__get', 2 => 'count', 3 => 'current', 4 => 'escape', 5 => 'get', 6 => 'getRaw', 7 => 'getRawValue', 8 => 'isClassMarkedAsSafe', 9 => 'key', 10 => 'markClassAsSafe', 11 => 'markClassesAsSafe', 12 => 'next', 13 => 'offsetExists', 14 => 'offsetGet', 15 => 'offsetSet', 16 => 'offsetUnset', 17 => 'rewind', 18 => 'unescape', 19 => 'valid', ) sfOutputEscaperObjectDecorator sfOutputEscaperArrayDecorator
  • 43. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas Symfony http://decharlas.uji.es/symfony Respuestas del Action
  • 44. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas Symfony http://decharlas.uji.es/symfony Respuestas del Action public function executeIndex() { return sfView::SUCCESS; // Corresponde indexSuccess.php return sfView::ERROR; // Corresponde indexError.php return 'MyResult' ; return $this ->renderText( &quot;<html><body>Hello, World!</body></html>&quot; ); $this ->getResponse()->setContent( &quot;<html><body>Hello, World!</body></html>&quot; ); return sfView::NONE; $output = '<&quot;title&quot;,&quot;My basic letter&quot;],[&quot;name&quot;,&quot;Mr Brown&quot;>' ; $this ->getResponse()->setHttpHeader( &quot;X-JSON&quot; , '(' . $output . ')' ); return sfView::HEADER_ONLY; $this ->setTemplate( 'myCustomTemplate' ); $this ->forward( 'otherModule' , 'index' ); $this ->redirect( 'otherModule/index' ); $this ->redirect( 'http://www.google.com/' ); }
  • 45. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas Symfony http://decharlas.uji.es/symfony Contenido Los Templates + MVC + Templates + Layout + Variables del Template + Fragmentos de código (Partials, Components, Slots) + Configuración del Layout + Accesso al Objeto Response + Conversión de Variables de vista + Respuestas del Action
  • 46. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas Symfony http://decharlas.uji.es/symfony Procesando las Vistas
  • 47. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas Symfony http://decharlas.uji.es/symfony Cadena de Ejecución 36px
  • 48. Request Controller Response Jornadas Symfony http://decharlas.uji.es/symfony Model Views
  • 49. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas Symfony http://decharlas.uji.es/symfony Cadena de Ejecución <?php require_once (dirname(__FILE__). '/../config/ProjectConfiguration.class.php' ); $configuration = ProjectConfiguration::getApplicationConfiguration( 'frontend' , 'prod' , false ); sfContext::createInstance( $configuration )->dispatch(); web/ index.php
  • 50. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas Symfony http://decharlas.uji.es/symfony sfContex instance Symfony Internals sfFrontWebController::dispatch() More symfony internals Filter Chain Filters Execution Filter sfExecutionFilter::handleAction() sfExecutionFilter::executeAction() sfExecutionFilter::handleView() sfExecutionFilter::executeView() Execution Filter Way Back sfWebResponse::send() Cadena de Ejecución
  • 51. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas Symfony http://decharlas.uji.es/symfony class sfExecutionFilter extends sfFilter {.... protected function executeAction( $actionInstance ) { // execute the action $actionInstance ->preExecute(); $viewName = $actionInstance ->execute( $this ->context->getRequest()); $actionInstance ->postExecute(); return null === $viewName ? sfView::SUCCESS : $viewName ; } .... } sfExecutionFilter::executeAction() lib/vendor/symfony/lib/filter/sfExecutionFilter.class.php Cadena de Ejecución
  • 52. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas Symfony http://decharlas.uji.es/symfony sfContex instance Symfony Internals sfFrontWebController::dispatch() More symfony internals Filter Chain Filters Execution Filter sfExecutionFilter::handleAction() sfExecutionFilter::executeAction() sfExecutionFilter::handleView() sfExecutionFilter::executeView() Execution Filter Way Back sfWebResponse::send() Cadena de Ejecución
  • 53. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas Symfony http://decharlas.uji.es/symfony sfExecutionFilter::executeView() protected function executeView( $moduleName , $actionName , $viewName , $viewAttributes ) { // get the view instance $view = $controller ->getView( $moduleName , $actionName , $viewName ); // execute the view $view ->execute(); // Select render Mode and render ... case sfView::RENDER_CLIENT: $viewData = $view ->render(); $this ->context->getResponse()->setContent( $viewData ); break ; ... } Cadena de Ejecución
  • 54. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas Symfony http://decharlas.uji.es/symfony sfController::getView() abstract class sfController { public function getView( $moduleName , $actionName , $viewName ) { // user view exists? $file = sfConfig::get( 'sf_app_module_dir' ). '/' . $moduleName . '/view/' . $actionName . $viewName . 'View.class.php' ; // Pregunta si existe la clase y si existe una clase espcial del módulo y devuelve las instancia de la clase. } } lib/vendor/symfony/lib/controller/sfController.class.php Cadena de Ejecución
  • 55. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas Symfony http://decharlas.uji.es/symfony ¿Y esto porque es importante?
  • 56. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas Symfony http://decharlas.uji.es/symfony Pues para extender su funcionamiento
  • 57. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas Symfony http://decharlas.uji.es/symfony Cambiando la clase de Vista
  • 58. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas Symfony http://decharlas.uji.es/symfony Cambiando la clase de Vista apps/frontend/moduleName/templates/indexSuccess.php apps/frontend/moduleName/view/indexSuccessView.php <?php class indexSuccessView extends sfPHPView { // Personalizamos algunos métodos } para una acción
  • 59. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas Symfony http://decharlas.uji.es/symfony Cambiando la clase de Vista apps/frontend/config/module.yml para todas las acciones all : # For all environments enabled : true is_internal : false view_class : myPersonalView
  • 60. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas Symfony http://decharlas.uji.es/symfony Las Clases
  • 61. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas Symfony http://decharlas.uji.es/symfony sfView, sfPHPView, sfPartialView Las Clases lib/vendor/symfony/lib/view/ sfView.class.php lib/vendor/symfony/lib/view/ sfPHPView.class.php lib/vendor/symfony/lib/view/ sfPartialView.class.php sfView sfPHPView sfPartialView myPHPView
  • 62. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas Symfony http://decharlas.uji.es/symfony Inspeccionemos sfPHPView lib/vendor/symfony/lib/view/ sfPHPView.class.php
  • 63. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas Symfony http://decharlas.uji.es/symfony sfPHPView Class extends abstract sfView class sfPHPView extends sfView { public function execute(){} protected function renderFile( $_sfFile ){ // render ob_start(); ob_implicit_flush( 0 ); require ( $_sfFile ); return ob_get_clean(); } protected function decorate( $content ) { // Decora con el Layout } public function render() { // Procesa toda la vista para obtener su contenido return $content ; } }
  • 64. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas Symfony http://decharlas.uji.es/symfony sfPHPView Class extends abstract sfView class sfPHPView extends sfView { public function execute(){} protected function renderFile($_sfFile){ // render ob_start(); ob_implicit_flush(0); require($_sfFile); return ob_get_clean(); } protected function decorate($content) { // Decora con el Layout } public function render() { // Procesa toda la vista para obtener su contenido return $content; } }
  • 65. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas Symfony http://decharlas.uji.es/symfony sfPHPView Class extends abstract sfView class sfPHPView extends sfView { public function execute(){} protected function renderFile($_sfFile){ // render ob_start(); ob_implicit_flush(0); require($_sfFile); return ob_get_clean(); } protected function decorate($content) { // Decora con el Layout } public function render() { // Procesa toda la vista para obtener su contenido return $content; } }
  • 66. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas Symfony http://decharlas.uji.es/symfony sfPHPView Class extends abstract sfView class sfPHPView extends sfView { public function execute(){} protected function renderFile( $_sfFile ){ // render ob_start(); ob_implicit_flush( 0 ); require ( $_sfFile ); return ob_get_clean(); } protected function decorate($content) { // Decora con el Layout } public function render() { // Procesa toda la vista para obtener su contenido return $content; } }
  • 67. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas Symfony http://decharlas.uji.es/symfony sfPHPView Class extends abstract sfView class sfPHPView extends sfView { public function execute(){} protected function renderFile($_sfFile){ // render ob_start(); ob_implicit_flush(0); require($_sfFile); return ob_get_clean(); } protected function decorate( $content ) { // Decora con el Layout } public function render() { // Procesa toda la vista para obtener su contenido return $content; } }
  • 68. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas Symfony http://decharlas.uji.es/symfony sfPHPView Class extends abstract sfView class sfPHPView extends sfView { public function execute(){} protected function renderFile($_sfFile){ // render ob_start(); ob_implicit_flush(0); require($_sfFile); return ob_get_clean(); } protected function decorate($content) { // Decora con el Layout } public function render() { // Procesa toda la vista para obtener su contenido return $content ; } }
  • 69. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas Symfony http://decharlas.uji.es/symfony Muchas Gracias CTO José Antonio Pio Gil
  • 70. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas Symfony http://decharlas.uji.es/symfony [email_address] http://twitter.com/josetonyp