SlideShare une entreprise Scribd logo
1  sur  112
Télécharger pour lire hors ligne
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

Contenu connexe

Tendances

Dependency injection-zendcon-2010
Dependency injection-zendcon-2010Dependency injection-zendcon-2010
Dependency injection-zendcon-2010
Fabien Potencier
 
Dependency Injection IPC 201
Dependency Injection IPC 201Dependency Injection IPC 201
Dependency Injection IPC 201
Fabien Potencier
 
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
 
Speed up your developments with Symfony2
Speed up your developments with Symfony2Speed up your developments with Symfony2
Speed up your developments with Symfony2
Hugo Hamon
 
Introducing Assetic (NYPHP)
Introducing Assetic (NYPHP)Introducing Assetic (NYPHP)
Introducing Assetic (NYPHP)
Kris Wallsmith
 

Tendances (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)
 

Similaire à The state of Symfony2 - SymfonyDay 2010

Models, controllers and views
Models, controllers and viewsModels, controllers and views
Models, controllers and views
priestc
 
Use Symfony2 components inside WordPress
Use Symfony2 components inside WordPress Use Symfony2 components inside WordPress
Use Symfony2 components inside WordPress
Maurizio Pelizzone
 
Jarv.us Showcase — SenchaCon 2011
Jarv.us Showcase — SenchaCon 2011Jarv.us Showcase — SenchaCon 2011
Jarv.us Showcase — SenchaCon 2011
Chris Alfano
 
symfony on action - WebTech 207
symfony on action - WebTech 207symfony on action - WebTech 207
symfony on action - WebTech 207
patter
 

Similaire à 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
 

Plus 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.3
Fabien Potencier
 
Caching on the Edge with Symfony2
Caching on the Edge with Symfony2Caching on the Edge with Symfony2
Caching on the Edge with Symfony2
Fabien Potencier
 
Dependency Injection - ConFoo 2010
Dependency Injection - ConFoo 2010Dependency Injection - ConFoo 2010
Dependency Injection - ConFoo 2010
Fabien 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.3
Fabien 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.3
Fabien Potencier
 
Symfony2 San Francisco Meetup 2009
Symfony2 San Francisco Meetup 2009Symfony2 San Francisco Meetup 2009
Symfony2 San Francisco Meetup 2009
Fabien Potencier
 
Symfony And Zend Framework Together 2009
Symfony And Zend Framework Together 2009Symfony And Zend Framework Together 2009
Symfony And Zend Framework Together 2009
Fabien 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 PHP
Fabien 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
 

Plus 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)
 

Dernier

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
Safe Software
 
+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...
?#DUbAI#??##{{(☎️+971_581248768%)**%*]'#abortion pills for sale in dubai@
 

Dernier (20)

Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
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
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
Top 10 Most Downloaded Games on Play Store in 2024
Top 10 Most Downloaded Games on Play Store in 2024Top 10 Most Downloaded Games on Play Store in 2024
Top 10 Most Downloaded Games on Play Store in 2024
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
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
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live StreamsTop 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
HTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation StrategiesHTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation Strategies
 
+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...
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 

The state of Symfony2 - SymfonyDay 2010