WEBEXPO, PRAHA 24. ZÁŘÍ 2011



Podobné dokumenty
Ing. Přemysl Brada, MSc., Ph.D. Ing. Martin Dostal. Katedra informatiky a výpočetní techniky, FAV, ZČU v Plzni

Principy fungování WWW serverů a browserů. Internetové publikování

Snadný vývoj webových aplikací s Nette. Lukáš Jelínek

BI-AWD. Administrace Webového a Databázového serveru Virtualizace HTTP serveru

Hypertext Transfer Protocol (HTTP/1.1 RFC 2616) Počítačové sítě Pavel Šinták

Webové služby a XML. Obsah přednášky. Co jsou to webové služby. Co jsou to webové služby. Webové služby a XML

Protokol HTTP 4IZ228 tvorba webových stránek a aplikací

Třídy a objekty. Třídy a objekty. Vytvoření instance třídy. Přístup k atributům a metodám objektu. $z = new Zlomek(3, 5);


Připravil: Ing. Jiří Lýsek, Ph.D. Verze: Webové technologie

Obsah přednášky. Představení webu ASP.NET frameworky Relační databáze Objektově-relační mapování Entity framework

(X)HTML, CSS a jquery

WWW technologie. HTTP protokol

Drupal. Svobodný redakční systém. duben 2007 Jakub Suchý 1

Tvorba WWW stránek. přehled technologií používaných na webu principy jednotlivých technologií a možnosti jejich vzájemného kombinování

Počítačové sítě II. 18. World Wide Web, HTTP Miroslav Spousta,

Zranitelnosti webových aplikací. Vlastimil Pečínka, Seznam.cz Roman Kümmel, Soom.cz

Webové Aplikace (6. přednáška)

JSON API pro zjišťování cen MtG karet

PŘEHLED A MOŽNOSTI VYUŽITÍ WEBOVÝCH MAPOVÝCH SLUŽEB

Instalace a konfigurace web serveru. WA1 Martin Klíma

Jaku b Su ch ý 1

Připravil: Ing. Jiří Lýsek, Ph.D. Verze: Webové aplikace

Django, 2. cvičení url, views, templates. Úvod

HTML - Úvod. Zpracoval: Petr Lasák

Mgr. Vlastislav Kučera přednáška č. 2

RESTful API TAMZ 1. Cvičení 11

Michal Krátký, Miroslav Beneš

Připravil: Ing. Jiří Lýsek, Ph.D. Verze: Webové technologie

v. 2425a Jak si na PC vypěstovat HTTP (WWW, Web) server a jak ho používat (snadno a rychle) by: Ing. Jan Steringa

Tvorba informačních systémů

Komponentově orientované webové frameworky. Jiří Stránský twitter.com/jistr

Testování webových aplikací Seznam.cz

Stručný úvod pro programátory. Michal Kuchta

KIV/PIA 2013 Jan Tichava

Hitparáda webhackingu nestárnoucí hity. Roman Kümmel

Dynamické stránky v praxi. Bedřich Košata

Content Security Policy

Architektura aplikace

Technologie Java Enterprise Edition. Přemek Brada, KIV ZČU

Instalace a konfigurace OpenAdmin tool na M$ a Linuxu

Ruby on Rails. Bc. Tomáš Juřík Bc. Bára Huňková

Koláčky, sezení. Martin Klíma

Bottle -- příklad. Databáze. Testovací data. id Jedinečný identifikátor řádku: Bude typu INT s AUTO_INCREMENT a nastavíme ho jako primární klíč

1 Webový server, instalace PHP a MySQL 13

Vývoj Internetových Aplikací

Připravil: Ing. Jiří Lýsek, Ph.D. Verze: Webové aplikace

X36WWW. Vícevrstvá architektura webové aplikace Martin Klíma. Tvorba Webu 2 1

Počítačové sítě II 17. WWW, HTTP. Miroslav Spousta, 2005

Obsah. Rozdíly mezi systémy Joomla 1.0 a Systém Joomla coby jednička online komunity...16 Shrnutí...16

Připravil: Ing. Jiří Lýsek, Ph.D. Verze: Webové aplikace

Michal Augustýn Microsoft Most Valuable Professional

Michal Augustýn ALWIL Software Microsoft Most Valuable Professional

1. Struktura stránky, zásady při psaní kódu, MVC pattern. Web pro kodéry (Petr Kosnar, ČVUT, FJFI, KFE, PINF 2008)

Úvod do Operačních Systémů

Postup. Úvodem. Hlavní myšlenka frameworku. application. system. assets. uploads

Webové služby. Martin Sochor

Model-View-Controller architektura PHP frameworks

Úvodem 9. Zpětná vazba od čtenářů 10 Zdrojové kódy ke knize 10 Errata 10. Než začneme 11

Vývoj Internetových Aplikací

Čipové karty Lekařská informatika

WWW a HTML. Základní pojmy. Ivo Peterka

PHP Best Practices. Please try to fit your code to 80 columns. That's decimal 80. A. Morton

PHP PHP je skriptovací programovací jazyk dynamických internetových stránek PHP je nezávislý na platformě

UJO Framework. revoluční architektura beans. verze

MODERNÍ WEB SNADNO A RYCHLE

IS pro podporu BOZP na FIT ČVUT

Formáty WWW zdrojů. Mgr. Filip Vojtášek.

Platforma.NET 11.NET Framework 11 Visual Basic.NET Základní principy a syntaxe 13

Programátorské večery. Tomáš Herceg Microsoft Student Partner

Doxygen. Jakub Břečka

Připravil: Ing. Jiří Lýsek, Ph.D. Verze: Webové aplikace

Django. Webový framework pro Python Projekt = webová stránka Aplikace = určitá funkcionalita webu

Uspořádání klient-server. Standardy pro Web

Připravil: Ing. Jiří Lýsek, Ph.D. Verze: Webové aplikace

Využití OOP v praxi -- Knihovna PHP -- Interval.cz

Skriptovací jazyky. Obsah

KAPITOLA 1 SOCIÁLNÍ SÍTĚ A PHP...17

Nový Node Monitor. 13. prosince Lukáš Turek Praha12.Net

Plánování a vývoj základního frameworku

VÝVOJ INTERNETOVÝCH APLIKACÍ - VIA

Proč Angular JS framework?

Škola: Gymnázium, Brno, Slovanské náměstí 7 III/2 Inovace a zkvalitnění výuky prostřednictvím ICT Název projektu: Inovace výuky na GSN

Programování v jazyce JavaScript

NSWI096 - INTERNET JavaScript

1. Webový server, instalace PHP a MySQL 13

Rezervační systém Tvorba WWW stránek

Automatizace správy linuxové infrastruktury pomocí Katello a Puppet LinuxDays

1. Úvod do Ajaxu 11. Jak Ajax funguje? 13

language="javascript">... </script>.

Připravil: Ing. Jiří Lýsek, Ph.D. Verze: Webové technologie

Úvod do tvorby internetových aplikací

INFORMAČNÍ SYSTÉMY NA WEBU

Mgr. Vlastislav Kučera lekce č. 2

[ASP].NET Core Demystified. Miroslav Holec. Konzultant a lektor [ASP].NET Core.

Webové služby a XML. Miroslav Beneš

HTML Hypertext Markup Language

Zápasíme s REST API. Lukáš Křečan REST API Architect GoodData

PODMÍNKY POSKYTOVÁNÍ PŘÍSTUPU K PORTÁLU NAMĚŘENÝCH DAT POMOCÍ WEBOVÝCH SLUŽEB SPOLEČNOSTI ČEZ DISTRIBUCE, A. S.

Aplikační vrstva. Úvod do Php. Ing. Martin Dostal

Transkript:

WEBEXPO, PRAHA 24. ZÁŘÍ 2011 BARTON STUDIO s.r.o. BARTON ADVERTISING www.bartonstudio.cz Pavel Campr pavel@campr.cz

Obsah přednášky: 30 min 1 Éra nových PHP frameworků 2 Symfony2 úvod 3 Symfony2 výběr z toho nejlepšího www.bartonstudio.cz

Co dnes máme mnoho frameworků (nejen PHP) roste jejich využití, více zkušeností * http://xkcd.com/927

Jak vzniklo to, co dnes máme? Ne vždy se vědělo, čeho by měl XY framework přesně dosáhnout. Až po dokončení se zjistilo, co se povedlo a co ne. Není cesta zpět. Musí se dodržet zpětná kompatibilita. Není cesta kupředu. Při zachovávání zpětné kompatibility nelze v určité chvíli pokračovat dál. Magie = problém v reálném světě Něco se stane, nevíme proč, nebo jak get() set() call() Nejasné API Nedostatečná dokumentace Globální konstanty define('debug', true); SCOP vsoop Static Class Oriented Programming Object Oriented Programming XY::getLogger()->error( ); $this->get( logger )->error( );

Éra nových PHP frameworků Nové koncepty, zahození starých špatných, ponechání starých dobrých (MVC) Feedback od komunity vývojářů Standardy + do not reinveltthewheel PHP 5.3 a několik let tu bude s námi Namespaces, Anotace Zrušení magie explicitní metody a proměnné, čistý kód // na úkor funkcionality (?) Malé jádro, využití existujících komponent Dependencyinjection // singleton ne (?) Nástroje Git http://www.sxc.hu

symfony http://www.symfony-project.org říjen 2005 1. revize (SVN) prosinec 2008 verze 1.2.0 současná stable verze 1.4.14 LTS (long term support) do listopadu 2012 PHP 5.2 + ověřené, komunita + známé best practices + plugins - provázané a závislé komponenty bez šablonovacího systému vs Symfony2 http://www.symfony.com leden 2010 1. revize (Git) 28. červenec 2011 - verze 2.0 současná stable verze 2.0.1 LTS až od Symfony 2.1 PHP 5.3 + komunita - neznámé best practices + bundles + nezávislé komponenty + šablonovací systém Twig + dokumentace -končí LTS + zrychlení, cache, ESI + standardy

Symfony2: BuildyourApp, not yourtools! 250 vývojářů (v den vydání 2.0), 18 měsíců vývoje github.com: 3021 watchers(#1 in PHP, #25 overall), 773 forks(#1 in PHP, #13 overall) Standardy: HTTP specifikace // RFC2616 PHPUnit Namespaces YAML, XML PSR-0 autoloading výběr komponent (HttpFoundation, Routing, ClassLoader, ) + externí knihovny (Swiftmailer, Twig, ) + externí bundles (DoctrineBundle, MonologBundle, ) + lepidlo + konfigurace = full-stack framework

Instalace Symfony Standard 2.0.1 distribuce http://symfony.com/download obsahuje plně funkční kostru web aplikace požadavky: 5.3.2, SQLite3, APC

/deps [symfony] git=http://github.com/symfony/symfony.git version=v2.0.1 [twig] git=http://github.com/fabpot/twig.git version=v1.1.2 [monolog] git=http://github.com/seldaek/monolog.git version=1.0.1 [doctrine-common] git=http://github.com/doctrine/common.git version=2.1.1 [SensioFrameworkExtraBundle] git=http://github.com/sensio/sensioframeworkextrabundle.git target=/bundles/sensio/bundle/frameworkextrabundle [JMSSecurityExtraBundle] git=http://github.com/schmittjoh/jmssecurityextrabundle.git target=/bundles/jms/securityextrabundle

Bundle Bundle je adresář. Obsahuje vše potřebné pro implementaci jedné funkcionality. (logování, zabezpečení, profilování, blog, katalog produktů, admin generátor, ) Konfigurace (routing, předvolby) PHP soubory Šablony Obrázky, CSS, JS, Překlady Testy Vše je Bundle. Včetně jádra Symfony2. www.symfony2bundles.org / github.com FOSUserBundle, SonataAdmin, FOSRest, FOSRest, FOSFacebook, SensioGenerator, SonataMedia, AvalancheImagine, WhiteOctoberAdmin, FOSComment, KnpPaginator, JMSDebugging, WebProfilerExtra, AdmingeneratorGenerator, Forum, JMSSecurityExtra, FOSTwitter, FOQElastica, Propel, Google, Assetic, SncRedis, JMSI18nRouting, Xhprof, DoctrineMigrations, Facebook, WebService, Twitter, Calendar, Doctrator, DataGrid, FirePHP, Guestbook, Imagine, DoctrineCouchDB, EWZRecaptcha, Tinymce, ZendNavigation, Tree, http://www.sxc.hu

Tvoříme aplikaci. Konvertujeme Requestdo Response. GET / HTTP/1.1 Host: webexpo.cz Accept: text/html User-Agent: PowerPoint/1.0 <?php $foo = $_GET['foo']; header('content-type: text/html'); header('expires: Sat, 24 Sep 2011 23:59:00 GMT'); echo '"foo" is: '.$foo; HTTP/1.1 200 OK Date: Sat, 24 Sep 2011 10:10:28 GMT Server: Apache/2.2.17 Content-Type: text/html Expires: Sat, 24 Sep 2011 23:59:00 GMT "foo" is: symfony2

přidáme trochu Symfony2 <?php require( ); $request = Request::createFromGlobals(); $path = $request->getpathinfo(); // the URL being requested if (in_array($path, array('', '/')) { $params = $request->getparameters(); $response = new Response('"foo" is:'.$params['foo']); } else { $response = new Response('Page not found.', 404); } $response->send();

* symfony.com

Start nové Symfony2 aplikace 1) Vytvořit a zaregistrovat nový bundle. $ php app/console generate:bundle 2) Nachystat URL adresy ( route ), 3) ty nasměrovat na nové akce, 4) které vytvoří Response objekt (nejčastěji přes šablonu). # app/config/routing.yml BartonStudioWebexpoBundle: resource: "@BartonStudioWebexpoBundle/Resources/config/routing.yml" prefix: / // app/appkernel.php // app/appkernel.php public function registerbundles() { $bundles = array( //... new BartonStudio\WebexpoBundle\BartonStudioWebexpoBundle(), ); //... return $bundles; }

Nachystání URL adres: routing(yaml konfigurace) # src/bartonstudio/webexpobundle/resources/config/routing.yml hello: pattern: /hello/{name} defaults: { _controller: BartonStudioWebexpoBundle:Hello:index } Vytvoření akce (nejjednodušší provedení) // src/bartonstudio/webexpobundle/controller/hellocontroller.php namespace BartonStudio\HelloBundle\Controller; use Symfony\Component\HttpFoundation\Response; class HelloController { public function indexaction($name) { return new Response('<html><body>Hello '.$name.'!</body></html>'); } }

// src/bartonstudio/webexpobundle/controller/hellocontroller.php namespace BartonStudio\WebexpoBundle\Controller; use Symfony\Bundle\FrameworkBundle\Controller\Controller; class HelloController extends Controller { public function indexaction($name) } { } Vytvoření akce lépe - s využitím šablony return $this->render('bartonstudiowebexpobundle:hello:index.html.twig', array('name' => $name)); Vytvoření akce pokročile (využití anotací pro nastavení routingu, zabezpečení a zapnutí šablony) /** * @Route("/hello/admin/{name}", name="secured_hello_admin") * @Secure(roles="ROLE_ADMIN") * @Template() */ public function helloadminaction($name) { return array('name' => $name); }

Environments http://localhost/app_dev.php/hello/webexpo http://localhost/app_staging.php/hello/webexpo http://localhost/app.php/hello/webexpo Stejný PHP kód, jiná konfigurace: logování, profilování využití cache ladicí nástroje odesílání e-mailů routing http://www.sxc.hu

Testování, profilování PHPUnit 3.5.11 nebo vyšší <?php class HelloControllerTest extends WebTestCase { public function testindex() { $client = static::createclient(); $crawler = $client->request('get', '/hello/webexpo'); // Write some assertions about the Response $this->asserttrue( $crawler->filter('html:contains("hello Webexpo")')->count() > 0 ); // Check that the profiler is enabled if ($profile = $client->getprofile()) { // check the number of requests $this->asserttrue($profile->getcollector('db')->getquerycount() < 10); // check the time spent in the framework $this->asserttrue( $profile->getcollector('timer')->gettime() < 0.5); } } } Lze vytvořit i více klientů najednou.

Web DebugToolbar

Servicecontainer Služba(service) = PHP objekt, který je vytvořen pro konání globálních úloh. Je využíván všude, kde je nutné využít jeho funkcionalitu. Service container = PHP objekt, který vytváří, spravuje a poskytuje jednotlivé služby $ php app/console container:debug [container] Public services Name Scope Class Name acme.demo.listener annotation_reader assetic.asset_manager database_connection debug.event_dispatcher doctrine esi filesystem form.factory http_kernel kernel container logger mailer container Swift_Mailer profiler request request router service_container container session templating twig container Twig_Environment container Acme\DemoBundle\ControllerListener container Doctrine\Common\Annotations\FileCacheReader container Assetic\Factory\LazyAssetManager n/a alias for doctrine.dbal.default_connection n/a alias for event_dispatcher container Symfony\Bundle\DoctrineBundle\Registry container Symfony\Component\HttpKernel\HttpCache\Esi container Symfony\Component\HttpKernel\Util\Filesystem container Symfony\Component\Form\FormFactory container Symfony\Bundle\FrameworkBundle\HttpKernel container Symfony\Bridge\Monolog\Logger // uvnitř akce $mailer = $this->get('mailer'); container Symfony\Component\HttpKernel\Profiler\Profiler container Symfony\Bundle\FrameworkBundle\Routing\Router container Symfony\Component\HttpFoundation\Session container Symfony\Bundle\TwigBundle\TwigEngine

Vytvoření vlastní služby # app/config/config.yml vytvoření služby "napevno" services: my_mailer: class: BartonStudio\WebexpoBundle\Mailer arguments: [sendmail] # transportni vrstva # app/config/config.yml vytvoření služby s měnitelnými parametry parameters: my_mailer.class: BartonStudio\WebexpoBundle\Mailer my_mailer.transport: sendmail services: my_mailer: class: %my_mailer.class% arguments: [%my_mailer.transport%] # src/bartonstudio/webexpobundle/resources/config/services.yml # využití jiných služeb = Referencing (Injecting) Services parameters: newsletter_manager.class: BartonStudio\WebexpoBundle\Newsletter\NewsletterManager services: newsletter_manager: class: %newsletter_manager.class% arguments: [@my_mailer, @templating]

Twig šablonovacísystém přednastavený, ale není povinný nejen pro (x)html, ale i pro xml, php, txt, rychlý, rozšiřitelný, bezpečný, jednoduchý dědičnost základní šablona nachystá bloky, ty se pak vloží do nadřazené šablony Twig1.2.0 http://twig.sensiolabs.org

/app/resources/views/layout.html.twig <!DOCTYPE html> <html> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8" /> <title>{% block title %}Welcome!{% endblock %}</title> {% javascripts '@BartonStudioWebexpoBundle/Resources/public/js/my1.js' '@BartonStudioWebexpoBundle/Resources/public/js/my2.js' %} <script type="text/javascript" src="{{ asset_url }}"></script> {% endjavascripts %} {% stylesheets '@BartonStudioWebexpoBundle/Resources/public/css/style1.css' '@BartonStudioWebexpoBundle/Resources/public/css/style2.css' %} <link href="{{ asset_url }}" type="text/css" rel="stylesheet" /> {% endstylesheets %} <link rel="shortcut icon" href="{{ asset('favicon.ico') }}" /> </head> <body> <header>webexpo 2011 DEMO</header> <article> {% block body %}{% endblock %} </article> <sidebar> {% block sidebar %}{% endblock %} </sidebar> </body> </html>

/src/bartonstudio/webexpobundle/resources/views/default/show.html.twig {% extends "::layout.html.twig" %} {% block body %} <h1>{% trans %}Topic{% endtrans %}: {{ topic }}</h1> <p>{{ description }}</p> {% include 'BartonStudioWebexpoBundle:Default:date.html.twig' with {'date': date} %} <a href="{{ path('webexpo_topic_show', { 'topic': 'Symfony2' }) }}">Symfony2</a> {% endblock %} {% block sidebar %} <h2>list of users</h2> <ul> {% for user in users %} <li class="{{ cycle(['odd', 'even']) }}">{{ user.username }}</li> {% else %} <li>no users found</li> {% endfor %} </ul> {% endblock %} {%... %} vykoná příkaz {{... }} vypíše hodnotu

Assetic Komprese CSS a JS souborů Kompresea úprava obrázků Slučování CSS a JS souborů Cache busting Kompilace (LESS, SASS, CoffeeScript, ) Optimalizované doručení CSS, JS, obrázků CDN

Assetic dev environment, HTTP požadavky prohlížeče při načtení stránky ahoj : GET http://webexpo2011demo.czlocal/app_dev.php/cs/webexpo/ahoj GET http://webexpo2011demo.czlocal/app_dev.php/js/a2e2c51_my1_1.js GET http://webexpo2011demo.czlocal/app_dev.php/js/a2e2c51_my2_2.js GET http://webexpo2011demo.czlocal/app_dev.php/css/a498173_style1_1.css GET http://webexpo2011demo.czlocal/app_dev.php/css/a498173_style2_2.css $ php app/console assetic:dump Dumping all dev assets. Debug mode is on. export JS / CSS souborů do statických souborů: [file+] S:\WWW\project_webexpo2011\trunk\app/../web/js/a2e2c51.js [file+] S:\WWW\project_webexpo2011\trunk\app/../web/js/a2e2c51_my1_1.js [file+] S:\WWW\project_webexpo2011\trunk\app/../web/js/a2e2c51_my2_2.js [file+] S:\WWW\project_webexpo2011\trunk\app/../web/css/a498173.css [file+] S:\WWW\project_webexpo2011\trunk\app/../web/css/a498173_style1_1.css [file+] S:\WWW\project_webexpo2011\trunk\app/../web/css/a498173_style2_2.css prodenvironment, HTTP požadavky prohlížeče při načtení stránky ahoj : GET http://webexpo2011demo.czlocal/app.php/cs/webexpo/ahoj GET http://webexpo2011demo.czlocal/js/a2e2c51.js GET http://webexpo2011demo.czlocal/css/a498173.css

Cache Nejefektivnější možnost pro zrychlení aplikace: uložit celý výstup (www stránku) do cache. Nejde vždy Typy cache: Browser cache Uvnitř www prohlížeče. Pro jednoho uživatele. Proxy cache poskytovatelé připojení (ISP), zvyšuje rychlost odezvy a snižuje provoz na síti. Pro více uživatelů. Gateway cache(reverse proxy, surrogate cache, HTTP akcelerátor) podobně jako proxycache, ale je přímo na serveru. http://www.sitepoint.com

Cache Symfony2 využívá pro řízení a konfiguraci cache pouze HTTP standard. HTTP/1.1 200 OK Date: Sat, 24 Sep 2011 10:18:41 GMT Server: Apache/1.3.3 (Unix) Cache-Control: max-age=3600, must-revalidate Expires: Sat, 24 Sep 2011 11:19:41 GMT Last-Modified: Fri, 23 Sep 2011 02:28:12 GMT ETag: "3e86-410-3596fbbc" Content-Length: 5040 Content-Type: text/html

Cache HTTP Expiration/ HTTP Validation $response->setclientttl( ); $response->setexpires( ); $response->setmaxage( ); $response->setsharedmaxage( ); $response->setttl( ); // HTTP 304 Not Modified $response->setetag( ); $response->setlastmodified( );

Cache HTTP Expiration/ nastavení v akci public function listaction() { // $response = $this->render( ); // uloží se v cache prohlížeče $response->setmaxage(60); return $response; }

Reverse proxy= Gatewaycache Symfony2 obsahuje vestavěný HTTP akcelerátor <?php // web/app.php require_once DIR.'/../app/bootstrap.php.cache'; require_once DIR.'/../app/AppKernel.php'; require_once DIR.'/../app/AppCache.php'; use Symfony\Component\HttpFoundation\Request; $kernel = new AppKernel('prod', false); $kernel->loadclasscache(); // caching kernel = reverse proxy = gateway cache $kernel = new AppCache($kernel); $kernel->handle(request::createfromglobals())->send();

Cache HTTP Expiration/ nastavení v akci // gateway cache máme teď zapnuto public function listaction() { } // $response = $this->render( ); $response->setmaxage(60); // chceme pro všechny uživatele // uložit výsledek akce do gateway cache $response->setsharedmaxage(60); return $response;

standard ESI EdgeSideIncludes <esi:include src="http://example.com/1.html" alt="http://bak.example.com/2.html" onerror="continue"/> Implementováno v Symfony2 uvnitř reverse proxy. Lze využít i jiné (Varnish). Do cache lze díky ESI ukládat fragmenty www stránky nezávisle.

ESI -ukázka <?php // BartonStudio/BlogBundle/Resources/views/show.html.twig {% extends "::layout.html.twig" %} {% block body %} <h1>{{ article.title }}</h1> <p>{{ article.body }}</p> {% endblock %} {% block sidebar %} <h2>twitter</h2> // zde bude vlozen tag <ESI>, pokud je to povoleno: // <esi:include src="{{ path('twitter_list') }}" /> // lépe udělat takto: {% render 'BartonStudioTwitterBundle:Twitter:list' {'standalone': true} %} {% endblock %} // zobrazení článku blogu (v bloku body ) a aktuální výpis z twitteru(v bloku sidebar )

Zabezpečení XSS (Cross-site scripting), CSRF (Cross-site request forgery), SQL injection Znepřístupnit uživateli (1) místa, kam by neměl mít přístup (2). Lze řídit: přístup uživatele k akcím ( editace článků ). nebo detailněji ACL (accesscontrollist) pro řízení přístupu k jednotlivým instancím objektů ( kdo může editovat článek #81 ) * symfony.com

* symfony.com

Co jsme nestihli Formuláře Validace Databáze Model, ORM (Doctrine2) Překlady, I18n, L10n Emaily (SwiftMailer)

Co jsme neměli rádi a teď se nám líbí Příkazová řádka Anotace Co nám zatím chybí Chybí větší tutorial(ala Jobeetze symfony 1.2) Nejasné bestpractices

Roadmap Symfony 2.1 (LTS -LongTimeSupport) konec roku 2011 první verze, kde všechny komponenty budou mít stabilní API (anotace @api)

Zdroje a užitečné odkazy: www.symfony.com The Book, The Cookbook symfony.com/components github.com/kriswallsmith/assetic twig.sensiolabs.org silex.sensiolabs.org Na shledanou nad vaším projektem BARTON STUDIO s.r.o. www.bartonstudio.cz