116
The path to symfony in the USA

The Path to Symfony in the USA

Embed Size (px)

DESCRIPTION

This talk will examine how symfony and the community around symfony has evolved since 2006. From the release of the initial symfony code to symfony 2.0, and all of the community milestones along the way. The focus of this talk is on how application development has evolved and how symfony and the community have kept pace over the years. - symfony-reloaded.org - symfony-project.org - http://joind.in/2592

Citation preview

Page 1: The Path to Symfony in the USA

The path to symfony in the USA

Page 2: The Path to Symfony in the USA

This talk will examine how symfony and the community around symfony has evolved since 2006. From the release of the initial symfony code to symfony 2.0, and all of the community milestones along the way. The focus of this talk is on how application development has evolved and how symfony and the community have kept pace over the years.

Page 3: The Path to Symfony in the USA

Dustin Whittledustinwhittle.com

Page 4: The Path to Symfony in the USA

How I got started

Page 5: The Path to Symfony in the USA

Consulting

dustinwhittle.com

Page 6: The Path to Symfony in the USA

Yahoo

yahoo.com

Page 7: The Path to Symfony in the USA

delicious.com

Page 8: The Path to Symfony in the USA

answers.yahoo.com

Page 9: The Path to Symfony in the USA

pulse.yahoo.com

Page 10: The Path to Symfony in the USA

developer.yahoo.com

Page 11: The Path to Symfony in the USA

sensiolabs.com

Page 12: The Path to Symfony in the USA

Sensio Labs launches in USA

Joining Sensio Labs in a partnership to launch services in USA

Opening an office in San Francisco

Project Consulting

Best Practices Consulting / Audits

Security Audits

Training from open source experts

symfony 1, Symfony 2, Doctrine 1, Doctrine 2, PHPUnit

Page 13: The Path to Symfony in the USA

guru.sensiolabs.com

Page 14: The Path to Symfony in the USA

trainings.sensiolabs.com

Page 15: The Path to Symfony in the USA

symfony-project.org

Page 16: The Path to Symfony in the USA

Symfony in the beginning

Released open source by Sensio Labs in October 2005

Built from years of real world experience in developing web applications

Built to improve developer productivity by solving common web problems

Page 17: The Path to Symfony in the USA

Symfony 0.x

Developed the core philosophy

Don’t reinvent the wheel

Keep it simple stupid

Don’t repeat yourself

Invest in unit + functional testing

Invest in quality documentation

Favor convention over configuration

Page 18: The Path to Symfony in the USA
Page 19: The Path to Symfony in the USA

Defined the core problem set / features

Model - View - Controller

Configuration - YAML + Multiple Environments

ORM Integration - CRUD / Admin Generators

Routing, Forms, Security, I18n, Caching

Developer tools - logging, exceptions, debug toolbar

Symfony 0.x

Page 20: The Path to Symfony in the USA

The start of an open source community

Launch of symfony-project.com

Initial tutorials / documentation

Support channels on IRC, Forum, Mailing lists

Established a core team with distinct leadership from Fabien

A way to contribute back on Trac - feedback, bugs, patches

Symfony 0.x

Page 21: The Path to Symfony in the USA

symfony-project.com

Page 22: The Path to Symfony in the USA

symfony 1.0

Page 23: The Path to Symfony in the USA

symfony-project.org/book/1_0

Page 24: The Path to Symfony in the USA

askeet.com

Page 25: The Path to Symfony in the USA

symfony 1.0 was good enough for Yahoo! to adopt

Page 26: The Path to Symfony in the USA

bookmarks.yahoo.com

Page 27: The Path to Symfony in the USA

delicious.com

Page 28: The Path to Symfony in the USA

answers.yahoo.com

Page 29: The Path to Symfony in the USA

current.com

Page 30: The Path to Symfony in the USA

symfony 1.x

Page 31: The Path to Symfony in the USA

The path to symfony 1.2The original symfony 2!

Introduction of the event dispatcher

Introduction of new sub frameworks

Forms / Caching / Tasks

Swiftmailer

Refactored major components

Configuration, Routing, I18n, Admin Generator, Plugins

Added support for Doctrine ORM

Page 32: The Path to Symfony in the USA

The path to symfony 1.2

The community starts to mature

Core team has dedicated release / community managers

The community gives back to symfony

Plugins + Patches + Documentation + Translations

Case studies + Evangelism

Community events

Our first official meetup at SymfonyCamp

Page 33: The Path to Symfony in the USA
Page 34: The Path to Symfony in the USA

jobeet.org

Page 35: The Path to Symfony in the USA

symfonians.org

Page 36: The Path to Symfony in the USA

symfony-check.org

Page 37: The Path to Symfony in the USA

symfony 1.4

Page 38: The Path to Symfony in the USA

The path to symfony 1.4

A stable + tested version of symfony

Removed deprecated code (kept in 1.3 instead)

Long Term Support

A healthy community supports itself

Active mailing lists where users support each other

Documentation - Translated into six languages

Events - SymfonyLive + SymfonyDay

Page 39: The Path to Symfony in the USA

symfony 1.4 Documentation

symfony-project.org/doc

Page 40: The Path to Symfony in the USA

SymfonyLive

symfony-live.com

Page 41: The Path to Symfony in the USA

symfonyday.com

Page 42: The Path to Symfony in the USA

bit.ly/sf-symfony-meetup

Page 43: The Path to Symfony in the USA

symfony 1.x is used on many web applications from large

companies to small startups

Page 44: The Path to Symfony in the USA

pulse.yahoo.com

Page 45: The Path to Symfony in the USA

ted.com

Page 46: The Path to Symfony in the USA

plancast.com

Page 47: The Path to Symfony in the USA

dogster.com

Page 48: The Path to Symfony in the USA

demo.apostrophenow.com

Page 49: The Path to Symfony in the USA

symfony-reloaded.org

Page 50: The Path to Symfony in the USA

symfony-reloaded.org

Page 51: The Path to Symfony in the USA

Symfony 2.xLearning from experience

Developed from scratch for performance and flexibility

PHP 5.3 - Support for namespaces and lambdas

Better Development Model

A collection of independent components

A framework for frameworks / full-stack framework

Better Community

Github enables collaboration + contributions

Page 52: The Path to Symfony in the USA

Symfony 2.xEvolved the philosophy

Dependency Injection Container + Event Dispatcher

Design by interface for a stable API

Less Magic = Favor explicit over implicit

Don’t reinvent the wheel

Doctrine 2 (DBAL / ORM / ODM)

Zend Framework 2 (Logger)

PHPUnit 3.5.x

Page 53: The Path to Symfony in the USA

Symfony 2.xMore flexibility

Configuration: YAML, XML, PHP

Templating: Twig or PHP

ORM: Doctrine or Propel

More features

HTTP Cache

ACL Security

Asset Management

Page 54: The Path to Symfony in the USA

Symfony 2.x

NoSQL via Doctrine 2

MongoDB

CouchDB

Better testing via PHPUnit

Jenkins / phpUnderControl Integration

Selenium Support

Code Coverage Reporting

Page 55: The Path to Symfony in the USA

Symfony 2.x

GitHub vs SVN

Better core team management

Weekly IRC Meetings

Hackdays / Sprints / Meetups

Page 56: The Path to Symfony in the USA

github.com/symfony/symfony

Page 57: The Path to Symfony in the USA

docs.symfony-reloaded.org

Page 58: The Path to Symfony in the USA

symfony2bundles.org

Page 59: The Path to Symfony in the USA

Symfony 2 is so good it is already used in production

Page 60: The Path to Symfony in the USA

dailymotion.com

Page 61: The Path to Symfony in the USA

lexpress.fr

Page 62: The Path to Symfony in the USA

shopopensky.com

Page 63: The Path to Symfony in the USA

exercise.com

Page 64: The Path to Symfony in the USA

weka-entertainment.com

Page 65: The Path to Symfony in the USA

control.servergrove.com

Page 66: The Path to Symfony in the USA

From symfony 1 to Symfony 2

Page 67: The Path to Symfony in the USA

It has never been easier to get started with symfony

Page 68: The Path to Symfony in the USA

aws.amazon.com/free

Page 69: The Path to Symfony in the USA

zerigo.com

Page 70: The Path to Symfony in the USA

cloudflare.com

Page 71: The Path to Symfony in the USA

The symfony 1.x sandbox

wget symfony-project.org/get/sf_sandbox_1_4.tgz

tar -xzf sf_sandbox_1_4.tgz

Page 72: The Path to Symfony in the USA

./symfony

Page 73: The Path to Symfony in the USA

Available tasks: :help Displays help for a task :list Lists tasksapp :routes Displays current routes for an applicationcache :clear Clears the cache (cc)configure :author Configure project author :database Configure database DSNdoctrine :build Generate code based on your schema :build-db Creates database for current model (doctrine:create-db) :build-filters Creates filter form classes for the current model :build-forms Creates form classes for the current model :build-model Creates classes for the current model :build-schema Creates a schema from an existing database :build-sql Creates SQL for the current model :clean-model-files Delete all generated model classes for models which no longer exist in your YAML :create-model-tables Drop and recreate tables for specified models. :data-dump Dumps data to the fixtures directory :data-load Loads YAML fixture data :delete-model-files Delete all the related auto generated files for a given model name. :dql Execute a DQL query and view the results :drop-db Drops database for current model :generate-admin Generates a Doctrine admin module :generate-migration Generate migration class :generate-migrations-db Generate migration classes from existing database connections :generate-migrations-diff Generate migration classes by producing a diff between your old and new schema. :generate-migrations-models Generate migration classes from an existing set of models :generate-module Generates a Doctrine module :generate-module-for-route Generates a Doctrine module for a route definition :insert-sql Inserts SQL for current model :migrate Migrates database to current/specified versiongenerate :app Generates a new application :module Generates a new module :project Generates a new project :task Creates a skeleton class for a new task

Page 74: The Path to Symfony in the USA

# You can find more information about this file on the symfony website:# http://www.symfony-project.org/reference/1_4/en/04-Settings

prod: .settings: no_script_name: true logging_enabled: false

dev: .settings: error_reporting: <?php echo (E_ALL | E_STRICT)."\n" ?> web_debug: true cache: false no_script_name: false etag: false

test: .settings: error_reporting: <?php echo ((E_ALL | E_STRICT) ^ E_NOTICE)."\n" ?> cache: false web_debug: false no_script_name: false etag: false

all: .settings: # Form security secret (CSRF protection) csrf_secret: 1b1783c5ae00e1d90926fb970d5df01c40c8ab98

# Output escaping settings escaping_strategy: true escaping_method: ESC_SPECIALCHARS

# Enable the database manager use_database: true

Sandbox/apps/frontend/config/settings.yml

Page 75: The Path to Symfony in the USA

./symfony generate:module frontend hello

Page 76: The Path to Symfony in the USA

localhost/sandbox/frontend_dev.php/hello/sf

Page 77: The Path to Symfony in the USA

# You can find more information about this file on the symfony website:# http://www.symfony-project.org/reference/1_4/en/10-Routing

# hello module ruleshello: url: /hello/:name param: { module: hello, action: index }

# default ruleshomepage: url: / param: { module: default, action: index }

sandbox/apps/frontend/config/routing.yml

Page 78: The Path to Symfony in the USA

<?php

class helloActions extends sfActions{ /** * Executes index action * * @param sfRequest $request A request object */ public function executeIndex(sfWebRequest $request) { $this->name = $request->getParameter('name', 'World'); }}

sandbox/apps/frontend/modules/hello/actions/actions.class.php

Page 79: The Path to Symfony in the USA

<h1>Hello Application</h1>

Hello <?php echo $name; ?>!

sandbox/apps/frontend/modules/hello/templates/indexSuccess.php

Page 80: The Path to Symfony in the USA

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <?php include_http_metas() ?> <?php include_metas() ?> <?php include_title() ?> <link rel="shortcut icon" href="/favicon.ico" /> <?php include_stylesheets() ?> <?php include_javascripts() ?> </head> <body> <?php echo $sf_content ?> </body></html>

sandbox/apps/frontend/templates/layout.php

Page 81: The Path to Symfony in the USA
Page 82: The Path to Symfony in the USA

<?php

include(dirname(__FILE__).'/../../bootstrap/functional.php');

$browser = new sfTestFunctional(new sfBrowser());$browser-> get('/hello/sf')->

with('request')->begin()-> isParameter('module', 'hello')-> isParameter('action', 'index')-> end()->

with('response')->begin()-> isStatusCode(200)-> checkElement('body', '/Hello sf!/')-> end();

sandbox/test/functional/frontend/helloActionsTest.php

Page 83: The Path to Symfony in the USA

./symfony test:all

Page 84: The Path to Symfony in the USA

The symfony 2.x sandbox

wget symfony-reloaded.org/downloads/sandbox_2_0_PR6.tgz

tar -xzf sandbox_2_0_PR6.tgz

Page 85: The Path to Symfony in the USA

localhost/sandbox/check.php

Page 86: The Path to Symfony in the USA

localhost/sandbox/app_dev.php/

Page 87: The Path to Symfony in the USA

./app/console

Page 88: The Path to Symfony in the USA

Available commands: help Displays help for a command (?) list Lists commandsassets :install cache :warmup Warms up an empty cachedoctrine :ensure-production-settings Verify that Doctrine is properly configured for a production environment.doctrine:cache :clear-metadata Clear all metadata cache for a entity manager. :clear-query Clear all query cache for a entity manager. :clear-result Clear result cache for a entity manager.doctrine:data :load Load data fixtures to your database.doctrine:database :create Create the configured databases. :drop Drop the configured databases.doctrine:generate :entities Generate entity classes and method stubs from your mapping information. :entity Generate a new Doctrine entity inside a bundle. :proxies Generates proxy classes for entity classes. :repositories Generate repository classes from your mapping information.doctrine:mapping :convert Convert mapping information between supported formats. :import Import mapping information from an existing database. :info Show basic information about all mapped entities.doctrine:query :dql Executes arbitrary DQL directly from the command line. :sql Executes arbitrary SQL directly from the command line.doctrine:schema :create Processes the schema and either create it directly on EntityManager Storage Connection :drop Drop the complete database schema of EntityManager Storage Connection :update Processes the schema and either update the database schema of EntityManager Storage init :bundle router :debug Displays current routes for an application :dump-apache Dumps all routes as Apache rewrite rules

Page 89: The Path to Symfony in the USA

app.config: charset: UTF-8 error_handler: null csrf_protection: enabled: true secret: xxxxxxxxxx router: { resource: "%kernel.root_dir%/config/routing.yml" } validation: { enabled: true, annotations: true } templating: { engines: ['twig'], assets_version: 1.0 } session: default_locale: en lifetime: 3600 auto_start: true

twig.config: debug: %kernel.debug% strict_variables: %kernel.debug%

doctrine.dbal: dbname: xxxxxxxx user: xxxxxxxx password: ~ logging: %kernel.debug%

doctrine.orm: auto_generate_proxy_classes: %kernel.debug% mappings: HelloBundle: ~

swiftmailer.config: transport: gmail username: xxxxxxxx password: xxxxxxxx

sandbox/app/config/config.yml

Page 90: The Path to Symfony in the USA

localhost/sandbox/app_dev.php/hello/sf

Page 91: The Path to Symfony in the USA

hello: pattern: /hello/{name} defaults: { _controller: HelloBundle:Hello:index }

sandbox/src/Sensio/HelloBundle/Resources/config/routing.yml

homepage: pattern: / defaults: { _controller: FrameworkBundle:Default:index }

hello: resource: @HelloBundle/Resources/config/routing.yml

sandbox/app/config/routing.yml

Page 92: The Path to Symfony in the USA

<?php

namespace Sensio\HelloBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;

class HelloController extends Controller{ public function indexAction($name) { return $this->render(‘HelloBundle:Hello:index.html.twig', array('name' => $name)); }}

sandbox/src/Sensio/HelloBundle/Controller/HelloController.php

Page 93: The Path to Symfony in the USA

<!DOCTYPE html><html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>{% block title %}Hello Application{% endblock %}</title> </head> <body> {% block body %}{% endblock %} </body></html>

sandbox/app/views/base.html.twig

Page 94: The Path to Symfony in the USA

{% extends "HelloBundle::layout.html.twig" %}

{% block content %} Hello {{ name }}!{% endblock %}

sandbox/src/Sensio/HelloBundle/Resources/views/Hello/index.html.twig

{% extends "::base.html.twig" %}

{% block body %} <h1>Hello Application</h1>

{% block content %}{% endblock %}{% endblock %}

sandbox/src/Sensio/HelloBundle/Resources/views/layout.html.twig

Page 95: The Path to Symfony in the USA

localhost/sandbox/app_dev.php/_profiler/{token}

Page 96: The Path to Symfony in the USA

<?php

namespace Sensio\HelloBundle\Tests\Controller;

use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;

class HelloControllerTest extends WebTestCase{ public function testIndex() { $client = $this->createClient();

$crawler = $client->request('GET', '/hello/Fabien');

$this->assertTrue($crawler->filter('html:contains("Hello Fabien")')->count() > 0); }}

sandbox/src/Sensio/HelloBundle/Tests/Controller/HelloController.php

Page 97: The Path to Symfony in the USA

phpunit -c app/phpunit.xml.dist

Page 98: The Path to Symfony in the USA

A community of symfony specialists

Page 99: The Path to Symfony in the USA

punkave.com

Page 100: The Path to Symfony in the USA

knplabs.com

Page 101: The Path to Symfony in the USA

liip.ch

Page 102: The Path to Symfony in the USA

clever-age.fr

Page 103: The Path to Symfony in the USA

interlutions.de

Page 104: The Path to Symfony in the USA

ideato.it

Page 105: The Path to Symfony in the USA

osscube.com

Page 106: The Path to Symfony in the USA

solutionset.com

Page 107: The Path to Symfony in the USA

servergrove.com

Page 108: The Path to Symfony in the USA

pagodabox.com/private-beta

Page 109: The Path to Symfony in the USA

symfonyexperts.com

Page 110: The Path to Symfony in the USA

SymfonyLive

symfony-live.com

Page 111: The Path to Symfony in the USA

Having a large community of specialists means more contributors and better services.

The community moves the project faster.

Page 112: The Path to Symfony in the USA

Want to contribute?

Join the community!

http://github.com/symfony

Contribute: code, documentation, tests, translations, bundles

Page 113: The Path to Symfony in the USA

Everyone is Hiring!

Page 114: The Path to Symfony in the USA

Questions?

Page 115: The Path to Symfony in the USA

Enjoy Symfony Live 2011

Page 116: The Path to Symfony in the USA

See you in Paris!