SlideShare uma empresa Scribd logo
1 de 112
Baixar para ler offline
The State of Symfony2
       Fabien Potencier
@fabpot

fabien.potencier.org
How many of you have already
     played with Symfony2?




       http://www.flickr.com/photos/bartworldv6/4206815555
Symfony2 is not ready for production




                    http://www.flickr.com/photos/rknickme/2205111920
Current guestimate for stable release
                        March 2011
          http://www.flickr.com/photos/pictureperfectpose/76138988
Crazy people
              do use Symfony2




http://www.flickr.com/photos/funky64/4267353106/
http://www.flickr.com/photos/lululemonathletica/4229883622
http://www.flickr.com/photos/cayusa/1209794692
http://www.flickr.com/photos/y-a-n/29789408
Symfony2 Translation Component
                http://www.flickr.com/photos/migrainechick/3704150226
http://www.flickr.com/photos/muffytyrone/4096351705
symfony   vs            Symfony2




          http://www.flickr.com/photos/thebusybrain/2492945625
Messages

Domains

Locales

           http://www.flickr.com/photos/rinux/631345826
$t->trans('Symfony2 is great!')
$t->trans('Hello {{ name }}!',
array('{{ name }}' => 'Symfony2'))
$t->trans('Symfony2 is great!', array(), 'app')
Pluralization vs Choice




             http://www.flickr.com/photos/orinrobertjohn/114430223
$t->transChoice($string, $count, $vars)
One apple|{{ count }} apples
one: One apple|some: {{ count }} apples
{1} One apple|[0,Inf] {{ count }} apples
0 apples

No apples
{0} No apples|
      {1} One apple|
]1,Inf] {{ count }} apples
[-Inf,0[ WTF?!|
    {0} No apples|
    {1} One apple|
 [2,19] Some apples|
[20,Inf] Many apples
{0} No apples|
    One apple|
{{ count }} apples
<app:translator fallback="en" />


             fr_FR
               fr
               en
PHP vs Twig




       http://www.flickr.com/photos/danielmarenco/4775410299
« All templating engines are equal
       in the eyes of Symfony2 »
$this->render('BlogBundle:Post:index.php', array());

                                 PHP renderer
$this->render('BlogBundle:Post:index.twig', array());

                                  Twig renderer
$this->render('BlogBundle:Post:index.twig', array());

                           Template logical name
« Template engines are all equals,
but some are more equals than others »
<?php echo $view['translator']
->trans('Symfony2 is great!') ?>


vs

{% trans "Symfony2 is great!" %}
<?php echo $view['translator']
->trans('Symfony2 is {{ what }}!',
array('{{ what }}' => 'great'), 'app') ?>

vs

{% trans from app %}
Symfony2 is {{ what }}!
{% endtrans %}
<?php echo $view['translator']
->transChoice(
    'No apples|One apple|{{ count }} apples',
    1,
    array('{{ count }}' => 1), 'app') ?>

vs

{% transchoice 1 from app %}
    No apples|One apple|{{ count }} apples
{% endtranschoice %}
<?php echo $view['translator']
->transChoice(
    'No apples|One apple|{{ count }} apples',
    1,
    array('{{ count }}' => 1), 'app') ?>
<?php echo $view['translator']
->transChoice(
    'No apples|One apple|{{ count }} apples',
    1,
    array('{{ count }}' => 1), 'app') ?>
<?php echo $view['translator']
->transChoice(
    'No apples|One apple|{{ count }} apples',
    1,
    array('{{ count }}' => 1), 'app') ?>
{% transchoice 1 from app %}
    No apples|One apple|{{ count }} apples
{% endtranschoice %}
<?php echo $view['session']->getFlash('notice') ?>

vs

{% flash "notice" %}
<?php $view['slots']->start('title') ?>
    Post: <?php echo $post->getTitle() ?>
<?php $view['slots']->stop() ?>

vs

{% block title %}
 Post: {{ post.title }}
{% endblock title %}
Customizing
            Forms
http://www.flickr.com/photos/blackbutterfly/2304084815
{{ form|render_enctype }}
{{ form|render_errors }}
{{ form|render_hidden }}

{{   form.name|render_widget }}
{{   form.name|render_label }}
{{   form.name|render_errors }}
{{   form.name|render_data }}
{{ form.name|render_widget }}
An InputField instance

        is rendered by

an input_field template block
{% block input_field %}
    {% tag "input" with attributes %}
{% endblock %}


{% block textarea_field %}
    {% contenttag "textarea" with attributes %}
        {{ field.displayedData }}
    {% endcontenttag %}
{% endblock %}
{{ form.name|render_widget }}
{{ form.user.name|render_widget }}
How can I customize the rendering of
              the widget?
{{ form.name|render_widget("BlogBundle::widgets.twig") }}
{% block input_field %}
    <span class="input_field">
        {% tag "input" with attributes %}
    </span>
{% endblock %}
{% extends 'TwigBundle::widgets.twig' %}

{% block input_field %}
    <span class="input_field">
        {% parent %}
    </span>
{% endblock %}
How can I customize the rendering of
  all input widgets for a given form?
{% form_theme form "BlogBundle::widgets.twig" %}
How can I customize the rendering of
   all input widgets for all forms?
<twig:config>
    <twig:form>
      <twig:resource>
        BlogBundle::widgets.twig
      </twig:resource>
    </twig:form>
</twig:config>
Nice inheritance/fallback templating system
Same questions as before but now for several widgets
{% block input_field %}
    <span class="input_field">
        {% parent %}
    </span>
{% endblock %}

{% block textarea_field %}
    <span class="textarea_field">
        {% parent %}
    </span>
{% endblock %}

...
{% block input_field %}
    {% tag "input" with attributes %}
{% endblock input_field %}

{% block textarea_field %}
    {% contenttag "textarea" with attributes %}{{ field.displayedData }}{% endcontenttag %}
{% endblock textarea_field %}

{% block choice_field %}
    {% if field.options.expanded %}
        {% for child in field %}{{ child|render_widget }}{% endfor %}
    {% else %}
        {% contenttag "select" with attributes %}{{ field|render_choices }}{% endcontenttag %}
    {% endif %}
{% endblock choice_field %}

{% block toggle_field %}
    {% display input_field %}
    {% if field.options.label %}{% contenttag "label" with ['for': field.id] %}{% trans field.options.label %}{% endcontenttag %}{% endif %}
{% endblock toggle_field %}

{% block date_time_field %}
    {{ field.date|render_widget }}{{ field.time|render_widget }}
{% endblock date_time_field %}

{% block date_field %}
    {% if field.field %}
        {% display input_field %}
    {% else %}
        {{ field.pattern|replace(['{{ year }}': field.year|render_widget, '{{ month }}': field.month|render_widget, '{{ day }}': field.day|
render_widget,]) }}
    {% endif %}
{% endblock date_field %}

{% block time_field %}
    {% if field.isfield %}
        {% display input_field %}
    {% else %}
        {{ field.hour|render_widget }}:{{ field.minute|render_widget }}
        {% if field.options.with_seconds %}:{{ field.second|render_widget }}{% endif %}
    {% endif %}
{% endblock time_field %}

{% block money_field %}
    {% set widget %}{% display input_field %}{% endset %}{{ field.pattern|replace(['{{ widget }}': widget]) }}
{% endblock money_field %}

{% block percent_field %}
    {% display input_field %} %
{% endblock percent_field %}
Symfony2 Security




                    http://www.flickr.com/photos/powerbooktrance/466709245
XSS
CSRF
SQL Injection




                http://www.flickr.com/photos/mastrobiggo/2322337810
Authentication
Authorization




                 http://www.flickr.com/photos/stevendepolo
symfony Core     sf*GuardPlugin   Your Code

$this->getUser()->getGuardUser()->getProfile()
OO Composition

$this->getUser()->getGuardUser()->getProfile()

    sfBasicSecurityUser       sfGuardUser            Your object
     tied to the session    tied to an ORM         tied to an ORM
                       comes from sf*GuardPlugin
What if I don’t want to use an ORM?
Symfony2 Core       Your Code

$this['security.context']->getUser()
$this['security.context']->getUser()

                            Your POPO
                     Implements AccountInterface
How does Symfony2 know about your Users?
AccountInterface

UserProviderInterface
namespace BundleAccountBundleModel;

use SymfonyComponentSecurityUserAccountInterface;

class User implements AccountInterface
{
    // ...
}
<provider>
    <class="AccountBundleModelUser" />
</provider>
namespace BundleAccountBundleEntity;

use SymfonyComponentSecurityUserAccountInterface;

/**
  * @Entity
  */
class User implements AccountInterface
{
     // ...
}
<provider>
    <entity class="AccountBundle:User" />
</provider>
namespace BundleAccountBundleEntityRepository;

use DoctrineORMEntityRepository;
use SymfonyComponentSecurityUserUserProviderInterface;

class UserRepository extends EntityRepository implements
UserProviderInterface
{
   public function loadUserByUsername($username)
   {
      return $this->findOneBy(array('user' => $username));
   }
}
<provider>
    <entity class="AccountBundle:User" property="user" />
</provider>
What if I want to use the email for the username?
namespace BundleBlogBundleEntity;

use SymfonyComponentSecurityUserAccountInterface;

/**
  * @Entity
  */
class User implements AccountInterface
{
     public function getUsername()
     {
         return $this->email;
     }

    // ...
}
But, I just have one administrator

or… How can I secure my personal website backend?
<provider>
  <user name="fabien" password="C00!" role="ROLE_ADMIN" />
</provider>
<provider>
  <password-encoder hash="sha1" />
  <user name="fabien"
    password="0beec7b5ea3f0fdbc95d0dd47f3c5bc275da8a33"
    role="ROLE_ADMIN" />
</provider>
namespace BundleBlogBundleEntity;

use SymfonyComponentSecurityUserAccountInterface;

/**
  * @Entity
  */
class User implements AccountInterface
{
     public function getSalt()
     {
         return $this->id;
     }

    // ...
}
Also useful for testing and prototyping
What if I want to use LDAP, in-memory, and a DB for my users?
<provider>
  <password-encoder hash="sha1" />
  <user name="fabien" password="..." role="ROLE_ADMIN" />
</provider>

<provider>
  <entity class="AccountBundle:User" property="user" />
</provider>
How is Security plugged in?
Request


      core.request


           getController()


      core.controller
                             core.exception

           getArguments()


      core.view


      core.response


Response
Symfony2 Firewall

http://www.flickr.com/photos/mederic/68456509
Request


      core.request


      core.security          HttpKernelSecurityFirewall

           getController()


      core.controller


           getArguments()


      core.view


      core.response


Response
Authentication
           http://www.flickr.com/photos/ul_marga/755378645
<firewall>
    <http-basic />
</firewall>
What if I want stateless authentication?
<firewall stateless="true">
    <http-basic />
</firewall>
What if I want different authentication strategies in one app?
<firewall pattern="/api/.*" stateless="true">
    <http-basic />
</firewall>

<firewall pattern=".*" security="none" />
<firewall pattern="/api/.*" stateless="true">
    <http-basic />
</firewall>

<firewall pattern="/public/.*" security="none" />

<firewall>
   <form-login />
</firewall>
One Application per Symfony2 Project



                        http://www.flickr.com/photos/cdell/548548453
What if I want to support
different authentication strategies
    in one section of an app?
<firewall>
   <form-login />
   <http-basic />
</firewall>
Using LDAP/certificate/OpenID authentication is really easy
Authorization




          http://www.flickr.com/photos/theodevil/4911737917
<access>
  <url path="/api/.*" role="ROLE_REMOTE" />
</access>
<access>
  <url role="ROLE_USER">
    <attribute key="_controller"
         pattern=".*BlogBundle.*" />
  </url>
</access>
/article/:id

<access>
  <url role="ROLE_ADMIN">
    <attribute key="id" pattern="21" />
  </url>
</access>

<access>
  <url path="/article/21" role="ROLE_ADMIN" />
</access>
<access>
 <url path="/admin/.*" ip="10.0.0.0/24" role="ROLE_ADMIN" />
</access>
<access>
  <url path="/api/.*" role="ROLE_REMOTE" />

 <url path="/public/.*"
    role="IS_AUTHENTICATED_ANONYMOUSLY" />

  <url role='ROLE_USER'>
    <attribute key="controller"
       pattern=".*BlogBundle.*" />
  </url>
</access>
… and much more
Implementation based on Spring Security
First proof-of-concept available next week
Symfony2: The Web Operating System?

                                               Kernel
                                               Events
                                                Proxy
                                             Firewall
                                            Bundles

               http://www.flickr.com/photos/declanjewell/2687934284
Questions?
The state of Symfony2 - SymfonyDay 2010

Mais conteúdo relacionado

Mais procurados

Dependency Injection with PHP 5.3
Dependency Injection with PHP 5.3Dependency Injection with PHP 5.3
Dependency Injection with PHP 5.3Fabien Potencier
 
Dependency injection-zendcon-2010
Dependency injection-zendcon-2010Dependency injection-zendcon-2010
Dependency injection-zendcon-2010Fabien Potencier
 
Dependency Injection IPC 201
Dependency Injection IPC 201Dependency Injection IPC 201
Dependency Injection IPC 201Fabien Potencier
 
Advanced symfony Techniques
Advanced symfony TechniquesAdvanced symfony Techniques
Advanced symfony TechniquesKris Wallsmith
 
Decouple Your Code For Reusability (International PHP Conference / IPC 2008)
Decouple Your Code For Reusability (International PHP Conference / IPC 2008)Decouple Your Code For Reusability (International PHP Conference / IPC 2008)
Decouple Your Code For Reusability (International PHP Conference / IPC 2008)Fabien Potencier
 
Design how your objects talk through mocking
Design how your objects talk through mockingDesign how your objects talk through mocking
Design how your objects talk through mockingKonstantin Kudryashov
 
Speed up your developments with Symfony2
Speed up your developments with Symfony2Speed up your developments with Symfony2
Speed up your developments with Symfony2Hugo Hamon
 
Symfony2, creare bundle e valore per il cliente
Symfony2, creare bundle e valore per il clienteSymfony2, creare bundle e valore per il cliente
Symfony2, creare bundle e valore per il clienteLeonardo Proietti
 
The Zen of Lithium
The Zen of LithiumThe Zen of Lithium
The Zen of LithiumNate Abele
 
The Origin of Lithium
The Origin of LithiumThe Origin of Lithium
The Origin of LithiumNate Abele
 
Love and Loss: A Symfony Security Play
Love and Loss: A Symfony Security PlayLove and Loss: A Symfony Security Play
Love and Loss: A Symfony Security PlayKris Wallsmith
 
Introducing Assetic (NYPHP)
Introducing Assetic (NYPHP)Introducing Assetic (NYPHP)
Introducing Assetic (NYPHP)Kris Wallsmith
 
Lithium: The Framework for People Who Hate Frameworks, Tokyo Edition
Lithium: The Framework for People Who Hate Frameworks, Tokyo EditionLithium: The Framework for People Who Hate Frameworks, Tokyo Edition
Lithium: The Framework for People Who Hate Frameworks, Tokyo EditionNate Abele
 
Lithium: The Framework for People Who Hate Frameworks
Lithium: The Framework for People Who Hate FrameworksLithium: The Framework for People Who Hate Frameworks
Lithium: The Framework for People Who Hate FrameworksNate Abele
 
PHP 5.3 and Lithium: the most rad php framework
PHP 5.3 and Lithium: the most rad php frameworkPHP 5.3 and Lithium: the most rad php framework
PHP 5.3 and Lithium: the most rad php frameworkG Woo
 
Rich domain model with symfony 2.5 and doctrine 2.5
Rich domain model with symfony 2.5 and doctrine 2.5Rich domain model with symfony 2.5 and doctrine 2.5
Rich domain model with symfony 2.5 and doctrine 2.5Leonardo Proietti
 
Doctrine MongoDB ODM (PDXPHP)
Doctrine MongoDB ODM (PDXPHP)Doctrine MongoDB ODM (PDXPHP)
Doctrine MongoDB ODM (PDXPHP)Kris Wallsmith
 

Mais procurados (20)

Dependency Injection with PHP 5.3
Dependency Injection with PHP 5.3Dependency Injection with PHP 5.3
Dependency Injection with PHP 5.3
 
Dependency injection-zendcon-2010
Dependency injection-zendcon-2010Dependency injection-zendcon-2010
Dependency injection-zendcon-2010
 
Dependency Injection IPC 201
Dependency Injection IPC 201Dependency Injection IPC 201
Dependency Injection IPC 201
 
Advanced symfony Techniques
Advanced symfony TechniquesAdvanced symfony Techniques
Advanced symfony Techniques
 
Decouple Your Code For Reusability (International PHP Conference / IPC 2008)
Decouple Your Code For Reusability (International PHP Conference / IPC 2008)Decouple Your Code For Reusability (International PHP Conference / IPC 2008)
Decouple Your Code For Reusability (International PHP Conference / IPC 2008)
 
Zero to SOLID
Zero to SOLIDZero to SOLID
Zero to SOLID
 
Symfony tips and tricks
Symfony tips and tricksSymfony tips and tricks
Symfony tips and tricks
 
Design how your objects talk through mocking
Design how your objects talk through mockingDesign how your objects talk through mocking
Design how your objects talk through mocking
 
Speed up your developments with Symfony2
Speed up your developments with Symfony2Speed up your developments with Symfony2
Speed up your developments with Symfony2
 
Symfony2, creare bundle e valore per il cliente
Symfony2, creare bundle e valore per il clienteSymfony2, creare bundle e valore per il cliente
Symfony2, creare bundle e valore per il cliente
 
The Zen of Lithium
The Zen of LithiumThe Zen of Lithium
The Zen of Lithium
 
The Origin of Lithium
The Origin of LithiumThe Origin of Lithium
The Origin of Lithium
 
Love and Loss: A Symfony Security Play
Love and Loss: A Symfony Security PlayLove and Loss: A Symfony Security Play
Love and Loss: A Symfony Security Play
 
PHP 5.3 in practice
PHP 5.3 in practicePHP 5.3 in practice
PHP 5.3 in practice
 
Introducing Assetic (NYPHP)
Introducing Assetic (NYPHP)Introducing Assetic (NYPHP)
Introducing Assetic (NYPHP)
 
Lithium: The Framework for People Who Hate Frameworks, Tokyo Edition
Lithium: The Framework for People Who Hate Frameworks, Tokyo EditionLithium: The Framework for People Who Hate Frameworks, Tokyo Edition
Lithium: The Framework for People Who Hate Frameworks, Tokyo Edition
 
Lithium: The Framework for People Who Hate Frameworks
Lithium: The Framework for People Who Hate FrameworksLithium: The Framework for People Who Hate Frameworks
Lithium: The Framework for People Who Hate Frameworks
 
PHP 5.3 and Lithium: the most rad php framework
PHP 5.3 and Lithium: the most rad php frameworkPHP 5.3 and Lithium: the most rad php framework
PHP 5.3 and Lithium: the most rad php framework
 
Rich domain model with symfony 2.5 and doctrine 2.5
Rich domain model with symfony 2.5 and doctrine 2.5Rich domain model with symfony 2.5 and doctrine 2.5
Rich domain model with symfony 2.5 and doctrine 2.5
 
Doctrine MongoDB ODM (PDXPHP)
Doctrine MongoDB ODM (PDXPHP)Doctrine MongoDB ODM (PDXPHP)
Doctrine MongoDB ODM (PDXPHP)
 

Semelhante a The state of Symfony2 - SymfonyDay 2010

Symfony 4 Workshop - Limenius
Symfony 4 Workshop - LimeniusSymfony 4 Workshop - Limenius
Symfony 4 Workshop - LimeniusIgnacio Martín
 
Building Single Page Application (SPA) with Symfony2 and AngularJS
Building Single Page Application (SPA) with Symfony2 and AngularJSBuilding Single Page Application (SPA) with Symfony2 and AngularJS
Building Single Page Application (SPA) with Symfony2 and AngularJSAntonio Peric-Mazar
 
"Full Stack frameworks or a story about how to reconcile Front (good) and Bac...
"Full Stack frameworks or a story about how to reconcile Front (good) and Bac..."Full Stack frameworks or a story about how to reconcile Front (good) and Bac...
"Full Stack frameworks or a story about how to reconcile Front (good) and Bac...Fwdays
 
Build powerfull and smart web applications with Symfony2
Build powerfull and smart web applications with Symfony2Build powerfull and smart web applications with Symfony2
Build powerfull and smart web applications with Symfony2Hugo Hamon
 
Curso Symfony - Clase 4
Curso Symfony - Clase 4Curso Symfony - Clase 4
Curso Symfony - Clase 4Javier Eguiluz
 
Models, controllers and views
Models, controllers and viewsModels, controllers and views
Models, controllers and viewspriestc
 
Use Symfony2 components inside WordPress
Use Symfony2 components inside WordPress Use Symfony2 components inside WordPress
Use Symfony2 components inside WordPress Maurizio Pelizzone
 
Using and reusing CakePHP plugins
Using and reusing CakePHP pluginsUsing and reusing CakePHP plugins
Using and reusing CakePHP pluginsPierre MARTIN
 
Working With The Symfony Admin Generator
Working With The Symfony Admin GeneratorWorking With The Symfony Admin Generator
Working With The Symfony Admin GeneratorJohn Cleveley
 
WCMTL 15 - Create your own shortcode (Fr)
WCMTL 15 - Create your own shortcode (Fr)WCMTL 15 - Create your own shortcode (Fr)
WCMTL 15 - Create your own shortcode (Fr)MichaelBontyes
 
Jarv.us Showcase — SenchaCon 2011
Jarv.us Showcase — SenchaCon 2011Jarv.us Showcase — SenchaCon 2011
Jarv.us Showcase — SenchaCon 2011Chris Alfano
 
Magento Live Australia 2016: Request Flow
Magento Live Australia 2016: Request FlowMagento Live Australia 2016: Request Flow
Magento Live Australia 2016: Request FlowVrann Tulika
 
Unit testing after Zend Framework 1.8
Unit testing after Zend Framework 1.8Unit testing after Zend Framework 1.8
Unit testing after Zend Framework 1.8Michelangelo van Dam
 
Functional testing with capybara
Functional testing with capybaraFunctional testing with capybara
Functional testing with capybarakoffeinfrei
 
Re-Design with Elixir/OTP
Re-Design with Elixir/OTPRe-Design with Elixir/OTP
Re-Design with Elixir/OTPMustafa TURAN
 
Animating angular applications
Animating angular applicationsAnimating angular applications
Animating angular applicationsTomek Sułkowski
 
symfony on action - WebTech 207
symfony on action - WebTech 207symfony on action - WebTech 207
symfony on action - WebTech 207patter
 

Semelhante a The state of Symfony2 - SymfonyDay 2010 (20)

Symfony 4 Workshop - Limenius
Symfony 4 Workshop - LimeniusSymfony 4 Workshop - Limenius
Symfony 4 Workshop - Limenius
 
Building Single Page Application (SPA) with Symfony2 and AngularJS
Building Single Page Application (SPA) with Symfony2 and AngularJSBuilding Single Page Application (SPA) with Symfony2 and AngularJS
Building Single Page Application (SPA) with Symfony2 and AngularJS
 
"Full Stack frameworks or a story about how to reconcile Front (good) and Bac...
"Full Stack frameworks or a story about how to reconcile Front (good) and Bac..."Full Stack frameworks or a story about how to reconcile Front (good) and Bac...
"Full Stack frameworks or a story about how to reconcile Front (good) and Bac...
 
Build powerfull and smart web applications with Symfony2
Build powerfull and smart web applications with Symfony2Build powerfull and smart web applications with Symfony2
Build powerfull and smart web applications with Symfony2
 
Curso Symfony - Clase 4
Curso Symfony - Clase 4Curso Symfony - Clase 4
Curso Symfony - Clase 4
 
Models, controllers and views
Models, controllers and viewsModels, controllers and views
Models, controllers and views
 
Use Symfony2 components inside WordPress
Use Symfony2 components inside WordPress Use Symfony2 components inside WordPress
Use Symfony2 components inside WordPress
 
Using and reusing CakePHP plugins
Using and reusing CakePHP pluginsUsing and reusing CakePHP plugins
Using and reusing CakePHP plugins
 
Working With The Symfony Admin Generator
Working With The Symfony Admin GeneratorWorking With The Symfony Admin Generator
Working With The Symfony Admin Generator
 
WCMTL 15 - Create your own shortcode (Fr)
WCMTL 15 - Create your own shortcode (Fr)WCMTL 15 - Create your own shortcode (Fr)
WCMTL 15 - Create your own shortcode (Fr)
 
Jarv.us Showcase — SenchaCon 2011
Jarv.us Showcase — SenchaCon 2011Jarv.us Showcase — SenchaCon 2011
Jarv.us Showcase — SenchaCon 2011
 
Magento Live Australia 2016: Request Flow
Magento Live Australia 2016: Request FlowMagento Live Australia 2016: Request Flow
Magento Live Australia 2016: Request Flow
 
Unit testing after Zend Framework 1.8
Unit testing after Zend Framework 1.8Unit testing after Zend Framework 1.8
Unit testing after Zend Framework 1.8
 
Symfony2 revealed
Symfony2 revealedSymfony2 revealed
Symfony2 revealed
 
Functional testing with capybara
Functional testing with capybaraFunctional testing with capybara
Functional testing with capybara
 
Re-Design with Elixir/OTP
Re-Design with Elixir/OTPRe-Design with Elixir/OTP
Re-Design with Elixir/OTP
 
Animating angular applications
Animating angular applicationsAnimating angular applications
Animating angular applications
 
Flask – Python
Flask – PythonFlask – Python
Flask – Python
 
Complex Sites with Silex
Complex Sites with SilexComplex Sites with Silex
Complex Sites with Silex
 
symfony on action - WebTech 207
symfony on action - WebTech 207symfony on action - WebTech 207
symfony on action - WebTech 207
 

Mais de Fabien Potencier

Design patterns revisited with PHP 5.3
Design patterns revisited with PHP 5.3Design patterns revisited with PHP 5.3
Design patterns revisited with PHP 5.3Fabien Potencier
 
Caching on the Edge with Symfony2
Caching on the Edge with Symfony2Caching on the Edge with Symfony2
Caching on the Edge with Symfony2Fabien Potencier
 
Dependency Injection - ConFoo 2010
Dependency Injection - ConFoo 2010Dependency Injection - ConFoo 2010
Dependency Injection - ConFoo 2010Fabien Potencier
 
Dependency Injection with PHP and PHP 5.3
Dependency Injection with PHP and PHP 5.3Dependency Injection with PHP and PHP 5.3
Dependency Injection with PHP and PHP 5.3Fabien Potencier
 
Symfony Components 2.0 on PHP 5.3
Symfony Components 2.0 on PHP 5.3Symfony Components 2.0 on PHP 5.3
Symfony Components 2.0 on PHP 5.3Fabien Potencier
 
Symfony2 San Francisco Meetup 2009
Symfony2 San Francisco Meetup 2009Symfony2 San Francisco Meetup 2009
Symfony2 San Francisco Meetup 2009Fabien Potencier
 
Symfony And Zend Framework Together 2009
Symfony And Zend Framework Together 2009Symfony And Zend Framework Together 2009
Symfony And Zend Framework Together 2009Fabien Potencier
 
Twig, the flexible, fast, and secure template language for PHP
Twig, the flexible, fast, and secure template language for PHPTwig, the flexible, fast, and secure template language for PHP
Twig, the flexible, fast, and secure template language for PHPFabien Potencier
 
symfony: Un Framework Open-Source pour les Entreprises (Solutions Linux 2008)
symfony: Un Framework Open-Source pour les Entreprises (Solutions Linux 2008)symfony: Un Framework Open-Source pour les Entreprises (Solutions Linux 2008)
symfony: Un Framework Open-Source pour les Entreprises (Solutions Linux 2008)Fabien Potencier
 
The symfony platform: Create your very own framework (PHP Quebec 2008)
The symfony platform: Create your very own framework (PHP Quebec 2008)The symfony platform: Create your very own framework (PHP Quebec 2008)
The symfony platform: Create your very own framework (PHP Quebec 2008)Fabien Potencier
 

Mais de Fabien Potencier (17)

Varnish
VarnishVarnish
Varnish
 
Look beyond PHP
Look beyond PHPLook beyond PHP
Look beyond PHP
 
Caching on the Edge
Caching on the EdgeCaching on the Edge
Caching on the Edge
 
Design patterns revisited with PHP 5.3
Design patterns revisited with PHP 5.3Design patterns revisited with PHP 5.3
Design patterns revisited with PHP 5.3
 
Symfony2 - WebExpo 2010
Symfony2 - WebExpo 2010Symfony2 - WebExpo 2010
Symfony2 - WebExpo 2010
 
Caching on the Edge with Symfony2
Caching on the Edge with Symfony2Caching on the Edge with Symfony2
Caching on the Edge with Symfony2
 
Dependency Injection - ConFoo 2010
Dependency Injection - ConFoo 2010Dependency Injection - ConFoo 2010
Dependency Injection - ConFoo 2010
 
Dependency Injection
Dependency InjectionDependency Injection
Dependency Injection
 
Symfony Components
Symfony ComponentsSymfony Components
Symfony Components
 
Dependency Injection with PHP and PHP 5.3
Dependency Injection with PHP and PHP 5.3Dependency Injection with PHP and PHP 5.3
Dependency Injection with PHP and PHP 5.3
 
Symfony Components 2.0 on PHP 5.3
Symfony Components 2.0 on PHP 5.3Symfony Components 2.0 on PHP 5.3
Symfony Components 2.0 on PHP 5.3
 
Playing With PHP 5.3
Playing With PHP 5.3Playing With PHP 5.3
Playing With PHP 5.3
 
Symfony2 San Francisco Meetup 2009
Symfony2 San Francisco Meetup 2009Symfony2 San Francisco Meetup 2009
Symfony2 San Francisco Meetup 2009
 
Symfony And Zend Framework Together 2009
Symfony And Zend Framework Together 2009Symfony And Zend Framework Together 2009
Symfony And Zend Framework Together 2009
 
Twig, the flexible, fast, and secure template language for PHP
Twig, the flexible, fast, and secure template language for PHPTwig, the flexible, fast, and secure template language for PHP
Twig, the flexible, fast, and secure template language for PHP
 
symfony: Un Framework Open-Source pour les Entreprises (Solutions Linux 2008)
symfony: Un Framework Open-Source pour les Entreprises (Solutions Linux 2008)symfony: Un Framework Open-Source pour les Entreprises (Solutions Linux 2008)
symfony: Un Framework Open-Source pour les Entreprises (Solutions Linux 2008)
 
The symfony platform: Create your very own framework (PHP Quebec 2008)
The symfony platform: Create your very own framework (PHP Quebec 2008)The symfony platform: Create your very own framework (PHP Quebec 2008)
The symfony platform: Create your very own framework (PHP Quebec 2008)
 

Último

Platformless Horizons for Digital Adaptability
Platformless Horizons for Digital AdaptabilityPlatformless Horizons for Digital Adaptability
Platformless Horizons for Digital AdaptabilityWSO2
 
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...apidays
 
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...Orbitshub
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Jeffrey Haguewood
 
Six Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal OntologySix Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal Ontologyjohnbeverley2021
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MIND CTI
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century educationjfdjdjcjdnsjd
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native ApplicationsWSO2
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesrafiqahmad00786416
 
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...apidays
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherRemote DBA Services
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businesspanagenda
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...apidays
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FMESafe Software
 
Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)Zilliz
 
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...apidays
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...apidays
 
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWEREMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWERMadyBayot
 

Último (20)

Platformless Horizons for Digital Adaptability
Platformless Horizons for Digital AdaptabilityPlatformless Horizons for Digital Adaptability
Platformless Horizons for Digital Adaptability
 
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
 
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
 
Six Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal OntologySix Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal Ontology
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challenges
 
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)
 
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWEREMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
 

The state of Symfony2 - SymfonyDay 2010