Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Symfony: Domesticando las Vistas

6,475 views

Published on

Domesticando las Vistas es una introducción y explicación a la capa de abstracción de Vistas del framework Symfony en PHP.

Published in: Technology, Design
  • Be the first to comment

  • Be the first to like this

Symfony: Domesticando las Vistas

  1. 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. 2. tr Jornadas Symfony http://decharlas.uji.es/symfony Jornadas Symfony http://decharlas.uji.es/symfony hacemos Webs!
  3. 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. 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. 5. Jornadas Symfony http://decharlas.uji.es/symfony Presentación Proyectos con Symfony Jornadas Symfony http://decharlas.uji.es/symfony
  6. 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. 7. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas Symfony http://decharlas.uji.es/symfony Domesticando las Vistas Contenido
  8. 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. 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. 10. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas Symfony http://decharlas.uji.es/symfony Los Templates
  11. 11. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas Symfony http://decharlas.uji.es/symfony Como empezó todo Pues con un MVC
  12. 12. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas Symfony http://decharlas.uji.es/symfony MVC Request Controller Response Model Views
  13. 13. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas Symfony http://decharlas.uji.es/symfony Templates apps/frontend/modules/ moduleName / templates /archivos.php
  14. 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. 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. 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. 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. 18. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas Symfony http://decharlas.uji.es/symfony Layout
  19. 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. 20. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas Symfony http://decharlas.uji.es/symfony Variables del Template
  21. 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. 22. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas Symfony http://decharlas.uji.es/symfony Fragmentos de códigos
  23. 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. 24. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas Symfony http://decharlas.uji.es/symfony Partials
  25. 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. 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. 27. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas Symfony http://decharlas.uji.es/symfony Components
  28. 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. 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. 30. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas Symfony http://decharlas.uji.es/symfony Slots
  31. 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. 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. 33. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas Symfony http://decharlas.uji.es/symfony Configuración del Layout
  34. 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. 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. 36. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas Symfony http://decharlas.uji.es/symfony Acceso al objeto Response
  37. 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. 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. 39. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas Symfony http://decharlas.uji.es/symfony Conversión de variables de vista Escaping Output
  40. 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. 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. 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. 43. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas Symfony http://decharlas.uji.es/symfony Respuestas del Action
  44. 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. 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. 46. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas Symfony http://decharlas.uji.es/symfony Procesando las Vistas
  47. 47. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas Symfony http://decharlas.uji.es/symfony Cadena de Ejecución 36px
  48. 48. Request Controller Response Jornadas Symfony http://decharlas.uji.es/symfony Model Views
  49. 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. 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. 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. 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. 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. 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. 55. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas Symfony http://decharlas.uji.es/symfony ¿Y esto porque es importante?
  56. 56. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas Symfony http://decharlas.uji.es/symfony Pues para extender su funcionamiento
  57. 57. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas Symfony http://decharlas.uji.es/symfony Cambiando la clase de Vista
  58. 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. 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. 60. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas Symfony http://decharlas.uji.es/symfony Las Clases
  61. 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. 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. 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. 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. 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. 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. 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. 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. 69. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas Symfony http://decharlas.uji.es/symfony Muchas Gracias CTO José Antonio Pio Gil
  70. 70. Jornadas Symfony http://decharlas.uji.es/symfony Jornadas Symfony http://decharlas.uji.es/symfony [email_address] http://twitter.com/josetonyp

×