SlideShare una empresa de Scribd logo
1 de 70
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
tr Jornadas Symfony  http://decharlas.uji.es/symfony Jornadas Symfony  http://decharlas.uji.es/symfony hacemos Webs!
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
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
Jornadas Symfony  http://decharlas.uji.es/symfony Presentación Proyectos con Symfony Jornadas Symfony  http://decharlas.uji.es/symfony
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
Jornadas Symfony  http://decharlas.uji.es/symfony Jornadas Symfony  http://decharlas.uji.es/symfony Domesticando las Vistas  Contenido
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
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
Jornadas Symfony  http://decharlas.uji.es/symfony Jornadas Symfony  http://decharlas.uji.es/symfony Los Templates
Jornadas Symfony  http://decharlas.uji.es/symfony Jornadas Symfony  http://decharlas.uji.es/symfony Como empezó todo Pues con un MVC
Jornadas Symfony  http://decharlas.uji.es/symfony Jornadas Symfony  http://decharlas.uji.es/symfony MVC Request Controller Response Model Views
Jornadas Symfony  http://decharlas.uji.es/symfony Jornadas Symfony  http://decharlas.uji.es/symfony Templates apps/frontend/modules/ moduleName / templates /archivos.php
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 >
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; )  ?>
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; )
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   )  ?>
Jornadas Symfony  http://decharlas.uji.es/symfony Jornadas Symfony  http://decharlas.uji.es/symfony Layout
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 >
Jornadas Symfony  http://decharlas.uji.es/symfony Jornadas Symfony  http://decharlas.uji.es/symfony Variables del Template
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
Jornadas Symfony  http://decharlas.uji.es/symfony Jornadas Symfony  http://decharlas.uji.es/symfony Fragmentos de códigos
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.
Jornadas Symfony  http://decharlas.uji.es/symfony Jornadas Symfony  http://decharlas.uji.es/symfony Partials
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 >
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
Jornadas Symfony  http://decharlas.uji.es/symfony Jornadas Symfony  http://decharlas.uji.es/symfony Components
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
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
Jornadas Symfony  http://decharlas.uji.es/symfony Jornadas Symfony  http://decharlas.uji.es/symfony Slots
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 >
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 >
Jornadas Symfony  http://decharlas.uji.es/symfony Jornadas Symfony  http://decharlas.uji.es/symfony Configuración del Layout
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
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
Jornadas Symfony  http://decharlas.uji.es/symfony Jornadas Symfony  http://decharlas.uji.es/symfony Acceso al objeto Response
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' ); }
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', )
Jornadas Symfony  http://decharlas.uji.es/symfony Jornadas Symfony  http://decharlas.uji.es/symfony Conversión de variables de vista Escaping Output
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
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 >
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
Jornadas Symfony  http://decharlas.uji.es/symfony Jornadas Symfony  http://decharlas.uji.es/symfony Respuestas del Action
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/' ); }
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
Jornadas Symfony  http://decharlas.uji.es/symfony Jornadas Symfony  http://decharlas.uji.es/symfony Procesando las Vistas
Jornadas Symfony  http://decharlas.uji.es/symfony Jornadas Symfony  http://decharlas.uji.es/symfony Cadena de Ejecución 36px
Request Controller Response Jornadas Symfony  http://decharlas.uji.es/symfony Model Views
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
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
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
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
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
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
Jornadas Symfony  http://decharlas.uji.es/symfony Jornadas Symfony  http://decharlas.uji.es/symfony ¿Y esto porque es importante?
Jornadas Symfony  http://decharlas.uji.es/symfony Jornadas Symfony  http://decharlas.uji.es/symfony Pues para extender su funcionamiento
Jornadas Symfony  http://decharlas.uji.es/symfony Jornadas Symfony  http://decharlas.uji.es/symfony Cambiando la clase de Vista
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
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
Jornadas Symfony  http://decharlas.uji.es/symfony Jornadas Symfony  http://decharlas.uji.es/symfony Las Clases
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
Jornadas Symfony  http://decharlas.uji.es/symfony Jornadas Symfony  http://decharlas.uji.es/symfony Inspeccionemos sfPHPView lib/vendor/symfony/lib/view/ sfPHPView.class.php
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 ; } }
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; } }
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; } }
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; } }
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; } }
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 ; } }
Jornadas Symfony  http://decharlas.uji.es/symfony Jornadas Symfony  http://decharlas.uji.es/symfony Muchas Gracias CTO José Antonio Pio Gil
Jornadas Symfony  http://decharlas.uji.es/symfony Jornadas Symfony  http://decharlas.uji.es/symfony [email_address] http://twitter.com/josetonyp

Más contenido relacionado

Destacado

Clase 4 routing
Clase 4 routingClase 4 routing
Clase 4 routinghydras_cs
 
Symfony: Domesticando los Formularios
Symfony: Domesticando los FormulariosSymfony: Domesticando los Formularios
Symfony: Domesticando los FormulariosJose Antonio Pio
 
Desarrollo Web Ágil con Symfony, Bootstrap y Angular
Desarrollo Web Ágil con Symfony, Bootstrap y AngularDesarrollo Web Ágil con Symfony, Bootstrap y Angular
Desarrollo Web Ágil con Symfony, Bootstrap y AngularFreelancer
 
The Buyer's Journey - by Chris Lema
The Buyer's Journey - by Chris LemaThe Buyer's Journey - by Chris Lema
The Buyer's Journey - by Chris LemaChris Lema
 
Classroom Management Tips for Kids and Adolescents
Classroom Management Tips for Kids and AdolescentsClassroom Management Tips for Kids and Adolescents
Classroom Management Tips for Kids and AdolescentsShelly Sanchez Terrell
 
The Presentation Come-Back Kid
The Presentation Come-Back KidThe Presentation Come-Back Kid
The Presentation Come-Back KidEthos3
 

Destacado (9)

Clase 4 routing
Clase 4 routingClase 4 routing
Clase 4 routing
 
Symfony 1, mi viejo amigo
Symfony 1, mi viejo amigoSymfony 1, mi viejo amigo
Symfony 1, mi viejo amigo
 
Symfony: Domesticando los Formularios
Symfony: Domesticando los FormulariosSymfony: Domesticando los Formularios
Symfony: Domesticando los Formularios
 
Symfony2 and AngularJS
Symfony2 and AngularJSSymfony2 and AngularJS
Symfony2 and AngularJS
 
Desarrollo Web Ágil con Symfony, Bootstrap y Angular
Desarrollo Web Ágil con Symfony, Bootstrap y AngularDesarrollo Web Ágil con Symfony, Bootstrap y Angular
Desarrollo Web Ágil con Symfony, Bootstrap y Angular
 
The Buyer's Journey - by Chris Lema
The Buyer's Journey - by Chris LemaThe Buyer's Journey - by Chris Lema
The Buyer's Journey - by Chris Lema
 
Classroom Management Tips for Kids and Adolescents
Classroom Management Tips for Kids and AdolescentsClassroom Management Tips for Kids and Adolescents
Classroom Management Tips for Kids and Adolescents
 
The Presentation Come-Back Kid
The Presentation Come-Back KidThe Presentation Come-Back Kid
The Presentation Come-Back Kid
 
Succession “Losers”: What Happens to Executives Passed Over for the CEO Job?
Succession “Losers”: What Happens to Executives Passed Over for the CEO Job? Succession “Losers”: What Happens to Executives Passed Over for the CEO Job?
Succession “Losers”: What Happens to Executives Passed Over for the CEO Job?
 

Similar a Symfony: Domesticando las Vistas

symfony admin generator - decharlas
symfony admin generator - decharlassymfony admin generator - decharlas
symfony admin generator - decharlasDecharlas
 
Introducción al microframework PHP Silex - Sergio Gómez - Betabeers Córdoba 0...
Introducción al microframework PHP Silex - Sergio Gómez - Betabeers Córdoba 0...Introducción al microframework PHP Silex - Sergio Gómez - Betabeers Córdoba 0...
Introducción al microframework PHP Silex - Sergio Gómez - Betabeers Córdoba 0...betabeers
 
Introducción a symfony - decharlas
Introducción a symfony - decharlasIntroducción a symfony - decharlas
Introducción a symfony - decharlasDecharlas
 
Plantillajornadasversion2 100708010347-phpapp01
Plantillajornadasversion2 100708010347-phpapp01Plantillajornadasversion2 100708010347-phpapp01
Plantillajornadasversion2 100708010347-phpapp01Alfonso Alba
 
Presentacion Sergio Viteri (Voota) decharlas/s
Presentacion Sergio Viteri (Voota) decharlas/sPresentacion Sergio Viteri (Voota) decharlas/s
Presentacion Sergio Viteri (Voota) decharlas/sSergio Viteri
 
Caso práctico symfony: voota.es - decharlas
Caso práctico symfony: voota.es - decharlasCaso práctico symfony: voota.es - decharlas
Caso práctico symfony: voota.es - decharlasDecharlas
 
Introducción al framework Symfony
Introducción al framework SymfonyIntroducción al framework Symfony
Introducción al framework SymfonyAlejandro Hernández
 
Symfony, cloud computing y webs scalables - decharlas
Symfony, cloud computing y webs scalables - decharlasSymfony, cloud computing y webs scalables - decharlas
Symfony, cloud computing y webs scalables - decharlasDecharlas
 
Symfony, cloud computing y web escalables
Symfony, cloud computing y web escalablesSymfony, cloud computing y web escalables
Symfony, cloud computing y web escalablesAsier Marqués
 
Desarrollo de Aplicaciones Web con Symfony 5/10/2011
Desarrollo de Aplicaciones Web con Symfony 5/10/2011Desarrollo de Aplicaciones Web con Symfony 5/10/2011
Desarrollo de Aplicaciones Web con Symfony 5/10/2011gorolabs
 
Barcelona Workshop 2008
Barcelona Workshop 2008Barcelona Workshop 2008
Barcelona Workshop 2008Mitusin
 
Symfony en la gestión de un centro de computación avanzada
Symfony en la gestión de un centro de computación avanzadaSymfony en la gestión de un centro de computación avanzada
Symfony en la gestión de un centro de computación avanzadaCésar Suárez Ortega
 
Caso práctico II: symfony en la gestión de un centro de computación avanzada ...
Caso práctico II: symfony en la gestión de un centro de computación avanzada ...Caso práctico II: symfony en la gestión de un centro de computación avanzada ...
Caso práctico II: symfony en la gestión de un centro de computación avanzada ...Decharlas
 
Symfony plugins - No reinventes la rueda PLUGINS - Jornadas Castellón
Symfony plugins - No reinventes la rueda PLUGINS - Jornadas CastellónSymfony plugins - No reinventes la rueda PLUGINS - Jornadas Castellón
Symfony plugins - No reinventes la rueda PLUGINS - Jornadas CastellónJordi Llonch
 
Tutorial3 Desymfony - La Vista. Twig
Tutorial3 Desymfony - La Vista. TwigTutorial3 Desymfony - La Vista. Twig
Tutorial3 Desymfony - La Vista. TwigMarcos Labad
 
Formularios y REST (deSymfony2013)
Formularios y REST (deSymfony2013)Formularios y REST (deSymfony2013)
Formularios y REST (deSymfony2013)moisesgallego
 
Silex, desarrollo web ágil y profesional con PHP
Silex, desarrollo web ágil y profesional con PHPSilex, desarrollo web ágil y profesional con PHP
Silex, desarrollo web ágil y profesional con PHPJavier Eguiluz
 
Introducción a ASP.NET
Introducción a ASP.NETIntroducción a ASP.NET
Introducción a ASP.NETpabloesp
 

Similar a Symfony: Domesticando las Vistas (20)

symfony admin generator - decharlas
symfony admin generator - decharlassymfony admin generator - decharlas
symfony admin generator - decharlas
 
Introducción al microframework PHP Silex - Sergio Gómez - Betabeers Córdoba 0...
Introducción al microframework PHP Silex - Sergio Gómez - Betabeers Córdoba 0...Introducción al microframework PHP Silex - Sergio Gómez - Betabeers Córdoba 0...
Introducción al microframework PHP Silex - Sergio Gómez - Betabeers Córdoba 0...
 
Introducción a symfony - decharlas
Introducción a symfony - decharlasIntroducción a symfony - decharlas
Introducción a symfony - decharlas
 
Plantillajornadasversion2 100708010347-phpapp01
Plantillajornadasversion2 100708010347-phpapp01Plantillajornadasversion2 100708010347-phpapp01
Plantillajornadasversion2 100708010347-phpapp01
 
Introduccion a symfony
Introduccion a symfonyIntroduccion a symfony
Introduccion a symfony
 
Presentacion Sergio Viteri (Voota) decharlas/s
Presentacion Sergio Viteri (Voota) decharlas/sPresentacion Sergio Viteri (Voota) decharlas/s
Presentacion Sergio Viteri (Voota) decharlas/s
 
Caso práctico symfony: voota.es - decharlas
Caso práctico symfony: voota.es - decharlasCaso práctico symfony: voota.es - decharlas
Caso práctico symfony: voota.es - decharlas
 
Introducción al framework Symfony
Introducción al framework SymfonyIntroducción al framework Symfony
Introducción al framework Symfony
 
Symfony, cloud computing y webs scalables - decharlas
Symfony, cloud computing y webs scalables - decharlasSymfony, cloud computing y webs scalables - decharlas
Symfony, cloud computing y webs scalables - decharlas
 
Symfony, cloud computing y web escalables
Symfony, cloud computing y web escalablesSymfony, cloud computing y web escalables
Symfony, cloud computing y web escalables
 
Desarrollo de Aplicaciones Web con Symfony 5/10/2011
Desarrollo de Aplicaciones Web con Symfony 5/10/2011Desarrollo de Aplicaciones Web con Symfony 5/10/2011
Desarrollo de Aplicaciones Web con Symfony 5/10/2011
 
Barcelona Workshop 2008
Barcelona Workshop 2008Barcelona Workshop 2008
Barcelona Workshop 2008
 
Symfony en la gestión de un centro de computación avanzada
Symfony en la gestión de un centro de computación avanzadaSymfony en la gestión de un centro de computación avanzada
Symfony en la gestión de un centro de computación avanzada
 
Caso práctico II: symfony en la gestión de un centro de computación avanzada ...
Caso práctico II: symfony en la gestión de un centro de computación avanzada ...Caso práctico II: symfony en la gestión de un centro de computación avanzada ...
Caso práctico II: symfony en la gestión de un centro de computación avanzada ...
 
Symfony plugins - No reinventes la rueda PLUGINS - Jornadas Castellón
Symfony plugins - No reinventes la rueda PLUGINS - Jornadas CastellónSymfony plugins - No reinventes la rueda PLUGINS - Jornadas Castellón
Symfony plugins - No reinventes la rueda PLUGINS - Jornadas Castellón
 
Tutorial3 Desymfony - La Vista. Twig
Tutorial3 Desymfony - La Vista. TwigTutorial3 Desymfony - La Vista. Twig
Tutorial3 Desymfony - La Vista. Twig
 
Formularios y REST (deSymfony2013)
Formularios y REST (deSymfony2013)Formularios y REST (deSymfony2013)
Formularios y REST (deSymfony2013)
 
Introducción a PHP5
Introducción a PHP5Introducción a PHP5
Introducción a PHP5
 
Silex, desarrollo web ágil y profesional con PHP
Silex, desarrollo web ágil y profesional con PHPSilex, desarrollo web ágil y profesional con PHP
Silex, desarrollo web ágil y profesional con PHP
 
Introducción a ASP.NET
Introducción a ASP.NETIntroducción a ASP.NET
Introducción a ASP.NET
 

Último

#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx
#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx
#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptxHugoGutierrez99
 
La Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfLa Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfjeondanny1997
 
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptxModelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptxtjcesar1
 
certificado de oracle academy cetrificado.pdf
certificado de oracle academy cetrificado.pdfcertificado de oracle academy cetrificado.pdf
certificado de oracle academy cetrificado.pdfFernandoOblitasVivan
 
PLANEACION DE CLASES TEMA TIPOS DE FAMILIA.docx
PLANEACION DE CLASES TEMA TIPOS DE FAMILIA.docxPLANEACION DE CLASES TEMA TIPOS DE FAMILIA.docx
PLANEACION DE CLASES TEMA TIPOS DE FAMILIA.docxhasbleidit
 
La electricidad y la electronica.10-7.pdf
La electricidad y la electronica.10-7.pdfLa electricidad y la electronica.10-7.pdf
La electricidad y la electronica.10-7.pdfcristianrb0324
 
Actividades de computación para alumnos de preescolar
Actividades de computación para alumnos de preescolarActividades de computación para alumnos de preescolar
Actividades de computación para alumnos de preescolar24roberto21
 
Análisis de los artefactos (nintendo NES)
Análisis de los artefactos (nintendo NES)Análisis de los artefactos (nintendo NES)
Análisis de los artefactos (nintendo NES)JuanStevenTrujilloCh
 
TALLER DE ANALISIS SOLUCION PART 2 (1)-1.docx
TALLER DE ANALISIS SOLUCION  PART 2 (1)-1.docxTALLER DE ANALISIS SOLUCION  PART 2 (1)-1.docx
TALLER DE ANALISIS SOLUCION PART 2 (1)-1.docxobandopaula444
 
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del PerúRed Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del PerúCEFERINO DELGADO FLORES
 
CommitConf 2024 - Spring Boot <3 Testcontainers
CommitConf 2024 - Spring Boot <3 TestcontainersCommitConf 2024 - Spring Boot <3 Testcontainers
CommitConf 2024 - Spring Boot <3 TestcontainersIván López Martín
 
Slideshare y Scribd - Noli Cubillan Gerencia
Slideshare y Scribd - Noli Cubillan GerenciaSlideshare y Scribd - Noli Cubillan Gerencia
Slideshare y Scribd - Noli Cubillan Gerenciacubillannoly
 
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptLUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptchaverriemily794
 
Herramientas que posibilitan la información y la investigación.pdf
Herramientas que posibilitan la información y la investigación.pdfHerramientas que posibilitan la información y la investigación.pdf
Herramientas que posibilitan la información y la investigación.pdfKarinaCambero3
 
_Planificacion Anual NTICX 2024.SEC.21.4.1.docx.pdf
_Planificacion Anual NTICX 2024.SEC.21.4.1.docx.pdf_Planificacion Anual NTICX 2024.SEC.21.4.1.docx.pdf
_Planificacion Anual NTICX 2024.SEC.21.4.1.docx.pdfBetianaJuarez1
 
Viguetas Pretensadas en concreto armado
Viguetas Pretensadas  en concreto armadoViguetas Pretensadas  en concreto armado
Viguetas Pretensadas en concreto armadob7fwtwtfxf
 
David_Gallegos - tarea de la sesión 11.pptx
David_Gallegos - tarea de la sesión 11.pptxDavid_Gallegos - tarea de la sesión 11.pptx
David_Gallegos - tarea de la sesión 11.pptxDAVIDROBERTOGALLEGOS
 
Documentacion Electrónica en Actos Juridicos
Documentacion Electrónica en Actos JuridicosDocumentacion Electrónica en Actos Juridicos
Documentacion Electrónica en Actos JuridicosAlbanyMartinez7
 
Trabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdfTrabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdfedepmariaperez
 

Último (20)

#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx
#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx
#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx
 
La Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfLa Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdf
 
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptxModelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
 
certificado de oracle academy cetrificado.pdf
certificado de oracle academy cetrificado.pdfcertificado de oracle academy cetrificado.pdf
certificado de oracle academy cetrificado.pdf
 
PLANEACION DE CLASES TEMA TIPOS DE FAMILIA.docx
PLANEACION DE CLASES TEMA TIPOS DE FAMILIA.docxPLANEACION DE CLASES TEMA TIPOS DE FAMILIA.docx
PLANEACION DE CLASES TEMA TIPOS DE FAMILIA.docx
 
La electricidad y la electronica.10-7.pdf
La electricidad y la electronica.10-7.pdfLa electricidad y la electronica.10-7.pdf
La electricidad y la electronica.10-7.pdf
 
Actividades de computación para alumnos de preescolar
Actividades de computación para alumnos de preescolarActividades de computación para alumnos de preescolar
Actividades de computación para alumnos de preescolar
 
Análisis de los artefactos (nintendo NES)
Análisis de los artefactos (nintendo NES)Análisis de los artefactos (nintendo NES)
Análisis de los artefactos (nintendo NES)
 
TALLER DE ANALISIS SOLUCION PART 2 (1)-1.docx
TALLER DE ANALISIS SOLUCION  PART 2 (1)-1.docxTALLER DE ANALISIS SOLUCION  PART 2 (1)-1.docx
TALLER DE ANALISIS SOLUCION PART 2 (1)-1.docx
 
El camino a convertirse en Microsoft MVP
El camino a convertirse en Microsoft MVPEl camino a convertirse en Microsoft MVP
El camino a convertirse en Microsoft MVP
 
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del PerúRed Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
 
CommitConf 2024 - Spring Boot <3 Testcontainers
CommitConf 2024 - Spring Boot <3 TestcontainersCommitConf 2024 - Spring Boot <3 Testcontainers
CommitConf 2024 - Spring Boot <3 Testcontainers
 
Slideshare y Scribd - Noli Cubillan Gerencia
Slideshare y Scribd - Noli Cubillan GerenciaSlideshare y Scribd - Noli Cubillan Gerencia
Slideshare y Scribd - Noli Cubillan Gerencia
 
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptLUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
 
Herramientas que posibilitan la información y la investigación.pdf
Herramientas que posibilitan la información y la investigación.pdfHerramientas que posibilitan la información y la investigación.pdf
Herramientas que posibilitan la información y la investigación.pdf
 
_Planificacion Anual NTICX 2024.SEC.21.4.1.docx.pdf
_Planificacion Anual NTICX 2024.SEC.21.4.1.docx.pdf_Planificacion Anual NTICX 2024.SEC.21.4.1.docx.pdf
_Planificacion Anual NTICX 2024.SEC.21.4.1.docx.pdf
 
Viguetas Pretensadas en concreto armado
Viguetas Pretensadas  en concreto armadoViguetas Pretensadas  en concreto armado
Viguetas Pretensadas en concreto armado
 
David_Gallegos - tarea de la sesión 11.pptx
David_Gallegos - tarea de la sesión 11.pptxDavid_Gallegos - tarea de la sesión 11.pptx
David_Gallegos - tarea de la sesión 11.pptx
 
Documentacion Electrónica en Actos Juridicos
Documentacion Electrónica en Actos JuridicosDocumentacion Electrónica en Actos Juridicos
Documentacion Electrónica en Actos Juridicos
 
Trabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdfTrabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdf
 

Symfony: Domesticando las Vistas

  • 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

Notas del editor

  1. 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
  2. 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
  3. 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
  4. 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
  5. 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
  6. 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
  7. 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
  8. 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
  9. 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
  10. 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
  11. 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
  12. 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
  13. 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
  14. 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
  15. 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
  16. 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
  17. 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
  18. 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
  19. 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
  20. 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
  21. 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
  22. 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
  23. 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
  24. 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
  25. 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
  26. 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
  27. 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
  28. 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
  29. 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
  30. 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
  31. 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
  32. 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
  33. 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
  34. 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
  35. 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
  36. 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
  37. 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
  38. 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
  39. 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
  40. 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
  41. 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
  42. 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
  43. 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
  44. 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
  45. 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
  46. 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
  47. 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
  48. 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
  49. 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
  50. 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
  51. 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
  52. 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
  53. 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
  54. 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
  55. 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
  56. 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
  57. 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
  58. 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
  59. 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
  60. 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
  61. 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
  62. 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
  63. 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
  64. 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
  65. 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
  66. 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
  67. 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
  68. 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