Upload
decharlas
View
2.994
Download
1
Embed Size (px)
DESCRIPTION
José Antonio Pío explicó que pasa en Symfony desque se producen un petición hasta que ésta se sirve en el navegador. (decharlas.com)
Citation preview
organizan patrocinan
colaboran
Jornadas Symfony 5 y 6 de julio 2010Universitat Jaume I, Castellón
http://decharlas.uji.es/symfony
tr
Jornadas Symfony http://decharlas.uji.es/symfonyJornadas Symfony http://decharlas.uji.es/symfony
hacemos Webs!
Jornadas Symfony 5 y 6 de julio 2010Universitat Jaume I, Castellón
http://decharlas.uji.es/symfony
Domesticando las vistas de symfonyJose Antonio Pio Acilia.es
Jornadas Symfony http://decharlas.uji.es/symfony
PresentaciónCTO 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ónProyectos con Symfony
Jornadas Symfony http://decharlas.uji.es/symfony
Jornadas Symfony http://decharlas.uji.es/symfony
PresentaciónProyectos con Symfony
Jornadas Symfony http://decharlas.uji.es/symfony
Jornadas Symfony http://decharlas.uji.es/symfonyJornadas Symfony http://decharlas.uji.es/symfony
Domesticando las Vistas Contenido
Jornadas Symfony http://decharlas.uji.es/symfonyJornadas 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/symfonyJornadas 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/symfonyJornadas Symfony http://decharlas.uji.es/symfony
Los Templates
Jornadas Symfony http://decharlas.uji.es/symfonyJornadas Symfony http://decharlas.uji.es/symfony
Como empezó todoPues con un MVC
Jornadas Symfony http://decharlas.uji.es/symfonyJornadas Symfony http://decharlas.uji.es/symfony
MVC
Request Controller Response
Model Views
Jornadas Symfony http://decharlas.uji.es/symfonyJornadas Symfony http://decharlas.uji.es/symfony
Templates
apps/frontend/modules/moduleName/templates/archivos.php
Jornadas Symfony http://decharlas.uji.es/symfonyJornadas Symfony http://decharlas.uji.es/symfony
Templates
<?php use_helper('I18N', 'Date') ?><?php include_partial('attribute/assets') ?>
<div id="sf_admin_container" class="tab_sf_admin_container_attributes" ><h1><?php echo __('Attribute List', array(), 'messages') ?></h1><ul><li><a href="#sf_admin_content_list">
<?php echo __("Categories") ?></a></li></ul>
<div id="sf_admin_content_list"> <?php include_partial('attribute/flashes') ?>
</div>
</div>
<script type="text/javascript">//Algo de Javascript</script>
Jornadas Symfony http://decharlas.uji.es/symfonyJornadas Symfony http://decharlas.uji.es/symfony
TemplatesHelpers
<?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("attribute/list?parent_id=0&page=1") ?>
Jornadas Symfony http://decharlas.uji.es/symfonyJornadas Symfony http://decharlas.uji.es/symfony
TemplatesHelpers 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( __("Signout"), url_for('@sf_guard_signout') )url_for("@attribute_attribute_new?parent_id={$parent_id}")
Jornadas Symfony http://decharlas.uji.es/symfonyJornadas Symfony http://decharlas.uji.es/symfony
TemplatesHelpers 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/symfonyJornadas Symfony http://decharlas.uji.es/symfony
Layout
Jornadas Symfony http://decharlas.uji.es/symfonyJornadas Symfony http://decharlas.uji.es/symfony
Layout
apps/frontend/templates/layout.php
Layout
Template
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<?php include_http_metas() ?> <?php include_metas() ?> <?php include_title() ?> <link rel="shortcut icon" href="/favicon.ico" /> <?php include_stylesheets() ?> <?php include_javascripts() ?></head><body>
<div id="wrapper"><?php echo $sf_content ?>
</div></body></html>
Jornadas Symfony http://decharlas.uji.es/symfonyJornadas Symfony http://decharlas.uji.es/symfony
Variables del Template
Jornadas Symfony http://decharlas.uji.es/symfonyJornadas 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/symfonyJornadas Symfony http://decharlas.uji.es/symfony
Fragmentos de códigos
Jornadas Symfony http://decharlas.uji.es/symfonyJornadas 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/symfonyJornadas Symfony http://decharlas.uji.es/symfony
Partials
Jornadas Symfony http://decharlas.uji.es/symfonyJornadas Symfony http://decharlas.uji.es/symfony
Fragmentos de códigosParcial
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="sf_admin_content"> <?php include_partial('moduleName/myPartial', array('variable' => $variable) ) ?></div>
Jornadas Symfony http://decharlas.uji.es/symfonyJornadas Symfony http://decharlas.uji.es/symfony
Fragmentos de códigosParcial
<div id="sf_admin_container"> <h1><?php echo $variable ?></h1></div>
apps/frontend/modules/moduleName/templates/_myPartial.php
Jornadas Symfony http://decharlas.uji.es/symfonyJornadas Symfony http://decharlas.uji.es/symfony
Components
Jornadas Symfony http://decharlas.uji.es/symfonyJornadas Symfony http://decharlas.uji.es/symfony
Fragmentos de códigosComponents
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="rss_box" >
<div class="rss_title"> <?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/symfonyJornadas Symfony http://decharlas.uji.es/symfony
<?php use_helper('I18N', 'Date') ?><?php include_partial('attribute/assets') ?>
<div id="sf_admin_container" class="tab_sf_admin_container_attributes" ><h1><?php echo __('Attribute List', array(), 'messages') ?></h1><ul><li><a href="#sf_admin_content_list">
<?php echo __("Categories") ?></a></li></ul>
<div id="sf_admin_content_list"> <?php include_partial('attribute/flashes') ?>
<?php include_component('moduleName', 'topRSS', array('rssCount' => $external_RSS->count() ) ) ?>
</div>
</div>
ComponentsFragmentos de códigos
apps/frontend/modules/otherModuleName/templates/indexSuccess.php
Jornadas Symfony http://decharlas.uji.es/symfonyJornadas Symfony http://decharlas.uji.es/symfony
Slots
Jornadas Symfony http://decharlas.uji.es/symfonyJornadas Symfony http://decharlas.uji.es/symfony
Fragmentos de códigosSlots
apps/frontend/templates/layout.php
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"><head></head>
<body><div id="content">
<div class="header"><div class="logo"><?php echo link_to( image_tag("/images/logo.png"),
"/" ) ?></div><?php if (has_slot('virtual_logo')): ?><div class="logo_virtual"><?php include_slot('virtual_logo') ?></div><?php else: ?>
</div><?php echo $sf_content ?>
</div></body></html>
Jornadas Symfony http://decharlas.uji.es/symfonyJornadas 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="company"><?php if ($company->hasLogo() ): ?>
<?php slot('virtual_logo') ?><?php echo $company->renderLogo() ?>
<?php end_slot() ?><?php endif; ?>
</div>
Jornadas Symfony http://decharlas.uji.es/symfonyJornadas Symfony http://decharlas.uji.es/symfony
Configuración del Layout
Jornadas Symfony http://decharlas.uji.es/symfonyJornadas 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/symfonyJornadas 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/symfonyJornadas Symfony http://decharlas.uji.es/symfony
Acceso al objeto Response
Jornadas Symfony http://decharlas.uji.es/symfonyJornadas 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("sub_title") );if ($this->article->html_meta_title){
$response->setTitle(trim($this->article->html_meta_title)." | {$domain->name}");
}else{$response->setTitle(trim($this->article->getTitle())." | {$domain-
>name}");}$response->addStyleSheet('article');$response->addJavaScript('article.js');
}
Jornadas Symfony http://decharlas.uji.es/symfonyJornadas 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/symfonyJornadas Symfony http://decharlas.uji.es/symfony
Conversión de variables de vistaEscaping Output
Jornadas Symfony http://decharlas.uji.es/symfonyJornadas Symfony http://decharlas.uji.es/symfony
Escaping OutputConversió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/symfonyJornadas Symfony http://decharlas.uji.es/symfony
Escaping OutputConversió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/symfonyJornadas Symfony http://decharlas.uji.es/symfony
Escaping OutputConversió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/symfonyJornadas Symfony http://decharlas.uji.es/symfony
Respuestas del Action
Jornadas Symfony http://decharlas.uji.es/symfonyJornadas Symfony http://decharlas.uji.es/symfony
Respuestas del Action
public function executeIndex(){
return sfView::SUCCESS; // Corresponde indexSuccess.phpreturn sfView::ERROR; // Corresponde indexError.php
return 'MyResult';return $this->renderText("<html><body>Hello,
World!</body></html>");
$this->getResponse()->setContent("<html><body>Hello, World!</body></html>");
return sfView::NONE;
$output = '<"title","My basic letter"],["name","Mr Brown">';$this->getResponse()->setHttpHeader("X-JSON", '('.$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/symfonyJornadas 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/symfonyJornadas Symfony http://decharlas.uji.es/symfony
Procesando las Vistas
Jornadas Symfony http://decharlas.uji.es/symfonyJornadas Symfony http://decharlas.uji.es/symfony
Cadena de Ejecución
Request Controller Response
Jornadas Symfony http://decharlas.uji.es/symfony
Model Views
Jornadas Symfony http://decharlas.uji.es/symfonyJornadas 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/symfonyJornadas Symfony http://decharlas.uji.es/symfony
sfContex instanceSymfony InternalssfFrontWebController::dispatch()More symfony internalsFilter Chain
FiltersExecution Filter
sfExecutionFilter::handleAction()sfExecutionFilter::executeAction()
sfExecutionFilter::handleView()sfExecutionFilter::executeView()
Execution Filter Way BacksfWebResponse::send()
Cadena de Ejecución
Jornadas Symfony http://decharlas.uji.es/symfonyJornadas 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/symfonyJornadas Symfony http://decharlas.uji.es/symfony
sfContex instanceSymfony InternalssfFrontWebController::dispatch()More symfony internalsFilter Chain
FiltersExecution Filter
sfExecutionFilter::handleAction()sfExecutionFilter::executeAction()
sfExecutionFilter::handleView()sfExecutionFilter::executeView()
Execution Filter Way BacksfWebResponse::send()
Cadena de Ejecución
Jornadas Symfony http://decharlas.uji.es/symfonyJornadas 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/symfonyJornadas 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/symfonyJornadas Symfony http://decharlas.uji.es/symfony
¿Y esto porque es importante?
Jornadas Symfony http://decharlas.uji.es/symfonyJornadas Symfony http://decharlas.uji.es/symfony
Pues para extender su funcionamiento
Jornadas Symfony http://decharlas.uji.es/symfonyJornadas Symfony http://decharlas.uji.es/symfony
Cambiando la clase de Vista
Jornadas Symfony http://decharlas.uji.es/symfonyJornadas 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/symfonyJornadas 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/symfonyJornadas Symfony http://decharlas.uji.es/symfony
Las Clases
Jornadas Symfony http://decharlas.uji.es/symfonyJornadas Symfony http://decharlas.uji.es/symfony
sfView, sfPHPView, sfPartialViewLas 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/symfonyJornadas Symfony http://decharlas.uji.es/symfony
Inspeccionemos sfPHPView
lib/vendor/symfony/lib/view/sfPHPView.class.php
Jornadas Symfony http://decharlas.uji.es/symfonyJornadas Symfony http://decharlas.uji.es/symfony
sfPHPView Classextends 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/symfonyJornadas Symfony http://decharlas.uji.es/symfony
sfPHPView Classextends 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/symfonyJornadas Symfony http://decharlas.uji.es/symfony
sfPHPView Classextends 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/symfonyJornadas Symfony http://decharlas.uji.es/symfony
sfPHPView Classextends 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/symfonyJornadas Symfony http://decharlas.uji.es/symfony
sfPHPView Classextends 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/symfonyJornadas Symfony http://decharlas.uji.es/symfony
sfPHPView Classextends 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/symfonyJornadas Symfony http://decharlas.uji.es/symfony
Muchas GraciasCTO José Antonio Pio Gil
Jornadas Symfony http://decharlas.uji.es/symfonyJornadas Symfony http://decharlas.uji.es/symfony
http://twitter.com/josetonyp