symfony: domesticando las vistas - decharlas

Post on 22-Nov-2014

2.994 Views

Category:

Technology

1 Downloads

Preview:

Click to see full reader

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)

TRANSCRIPT

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

josetonyp@acilia.es

http://twitter.com/josetonyp

top related