Top Banner
PHP Quebec 2007 www.symfony-project.com [email protected] www.sensio.com symfony Simplify your professional web development with PHP Fabien Potencier http://www.symfony-project.com/ http://www.sensio.com/
29

symfony: Simplify your professional web development with PHP (Symfony PHP Quebec 2007)

May 08, 2015

Download

Technology

Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: symfony: Simplify your professional web development with PHP (Symfony PHP Quebec 2007)

PHP Quebec 2007 www.symfony-project.com [email protected] www.sensio.com

symfonySimplify your professional

web development with PHP

Fabien Potencierhttp://www.symfony-project.com/

http://www.sensio.com/

Page 2: symfony: Simplify your professional web development with PHP (Symfony PHP Quebec 2007)

PHP Quebec 2007 www.symfony-project.com [email protected] www.sensio.com

Sensio• French Web Agency, founded in 1998

– 150 people– 30 people dedicated to Web technologies

Webmarketing

Open SourceTechnologies

(Framework PHP)

WebTechnologies

SENSIOWeb Agency

Page 3: symfony: Simplify your professional web development with PHP (Symfony PHP Quebec 2007)

PHP Quebec 2007 www.symfony-project.com [email protected] www.sensio.com

Sensio Labs• Open-Source technologies (LAMP stack)

– Linux– Apache– MySQL / PostgreSQL– PHP / Perl / Python / Ruby

• Open-Source dedicated team• Big company customers

– Web Consulting– Audit / Training– Web Development

symfony PHP Framework

Page 4: symfony: Simplify your professional web development with PHP (Symfony PHP Quebec 2007)

PHP Quebec 2007 www.symfony-project.com [email protected] www.sensio.com

symfony• PHP 5 Web Framework• Based on 9 years of Sensio experience• Based on well-known projets (Mojavi, Propel, Prado)

• Open-Source• Built for :

– Professional Websites– Complex needs– Demanding environments

LicenceMIT

Bring togetherEntreprise World

Open-Source World

Page 5: symfony: Simplify your professional web development with PHP (Symfony PHP Quebec 2007)

PHP Quebec 2007 www.symfony-project.com [email protected] www.sensio.com

Don’t reinvent the wheel• Follow best practices• MVC Pattern : Model / View / Controller

• Unit and functional test framework

• Environment and deployment support• Security (XSS protection by default)• Extensible (plugin system)

simplifyyour life

Page 6: symfony: Simplify your professional web development with PHP (Symfony PHP Quebec 2007)

PHP Quebec 2007 www.symfony-project.com [email protected] www.sensio.com

Develop faster• Each line of code has a cost

– To write the line– To test it– To maintain it

• Write less code– Architecture : controller, ORM, …– Configuration– Autoloading– Generators– Helpers

• More time for business rules, edge cases, …

less code

less complexity

less bugs

more productivity

more time

Page 7: symfony: Simplify your professional web development with PHP (Symfony PHP Quebec 2007)

PHP Quebec 2007 www.symfony-project.com [email protected] www.sensio.com

Main selling points• Documentation• Configurability• XSS protection• Debugging tools• Functional tests• Extensibility : Plugins• Admin Generator• ORM : Propel or Doctrine• i18n / l10n• 1.0 maintained for a long time

StandardPHP 5MVC

RoutingCache

Page 8: symfony: Simplify your professional web development with PHP (Symfony PHP Quebec 2007)

PHP Quebec 2007 www.symfony-project.com [email protected] www.sensio.com

Symfony installation• PEAR $ pear channel-discover pear.symfony-project.com $ pear install symfony/symfony-1.0.0

• SVN / symlink $ svn propedit svn:externals symfony http://svn.symfony-project.com/branches/1.0

• Sandbox $ curl -O http://www.symfony-project.com/get/sf_sandbox-1.0.0.tgz $ tar zxpf sf_sandbox-1.0.0.tgz

PEAR packageSubversion

PackageSandbox

easy

fast

recommended

Page 9: symfony: Simplify your professional web development with PHP (Symfony PHP Quebec 2007)

PHP Quebec 2007 www.symfony-project.com [email protected] www.sensio.com

Application Creation$ mkdir ~/sfdemo$ cd ~/sfdemo

$ symfony init-project sfdemo$ ./symfony init-app frontend

Project

Application(s)

Module(s)

Action(s)Composant(s)

Template

Page 10: symfony: Simplify your professional web development with PHP (Symfony PHP Quebec 2007)

PHP Quebec 2007 www.symfony-project.com [email protected] www.sensio.com

Database• Database configuration # config/databases.yml prod: propel: param: password: PAssWD all: propel: class: sfPropelDatabase param: dsn: mysql://root:@localhost/sfdemo

• Schema definition # config/schema.yml

post: title: { type: varchar, size: 255 } content: { type: longvarchar } is_published: { type: boolean } author_id: { type: integer, foreignTable: author, foreignReference: id } created_at: ~

Environmentsupport

SQL abstraction

Page 11: symfony: Simplify your professional web development with PHP (Symfony PHP Quebec 2007)

PHP Quebec 2007 www.symfony-project.com [email protected] www.sensio.com

Database• Test data # data/fixtures/data.yml Author: fabien: first_name: Fabien last_name: Potencier Post: first_post: author_id: fabien title: PHP Québec

$ ./symfony propel-build-all-load frontend

1) Creates model classes2) Converts schema to SQL3) Creates tables4) Loads test data

Page 12: symfony: Simplify your professional web development with PHP (Symfony PHP Quebec 2007)

PHP Quebec 2007 www.symfony-project.com [email protected] www.sensio.com

Model// lib/model/Author.phpclass Author extends BaseAuthor{ function getFullName() { return $this->getFirstName().' '.$this->getLastName(); }}

$author = new Author();$author->setFirstName('Fabien');$author->setLastName('Potencier');$author->save();

$post = new Post();$post->setAuthor($author);$post->setPublishedOn('12:00 tomorrow');$post->isPublished(true);$post->save();

$posts = PostPeer::doSelect(new Criteria());

ORMObject Relationship Mapping

Propel / Doctrine

Page 13: symfony: Simplify your professional web development with PHP (Symfony PHP Quebec 2007)

PHP Quebec 2007 www.symfony-project.com [email protected] www.sensio.com

Backend creation• Automatic creation of an Administration Backend,

ready for production– Lists– Pagination– Tri

$ ./symfony propel-init-admin frontend post Post

1) Creates a post module2) Generates configuration

Generated code is MVCand customizableConfiguration file

ControllerTemplates

– Filters– Validation– CRUD

Page 14: symfony: Simplify your professional web development with PHP (Symfony PHP Quebec 2007)

PHP Quebec 2007 www.symfony-project.com [email protected] www.sensio.com

Configurability• Module level # apps/frontend/modules/post/config/generator.yml generator: class: sfPropelAdminGenerator param: model_class: Post list: display: [=title, author, created_at] filters: [title, author_id, published_on] max_per_page: 5

• Application level # apps/frontend/config/security.yml default: is_secure: on credentials: admin

$ ./symfony plugin-install http://plugins.symfony-project.com/sfGuardPlugin

ConfigurationFramework

ProjectApplication

Module

LOC : 0

Page 15: symfony: Simplify your professional web development with PHP (Symfony PHP Quebec 2007)

PHP Quebec 2007 www.symfony-project.com [email protected] www.sensio.com

Admin Generator• List

Page 16: symfony: Simplify your professional web development with PHP (Symfony PHP Quebec 2007)

PHP Quebec 2007 www.symfony-project.com [email protected] www.sensio.com

Admin Generator• Edition

__toString()

widgets m2m relationship

Page 17: symfony: Simplify your professional web development with PHP (Symfony PHP Quebec 2007)

PHP Quebec 2007 www.symfony-project.com [email protected] www.sensio.com

Extensibility• Module extension class postActions extends autoPostActions { protected function addFiltersCriteria($c) { parent::addFiltersCriteria($c); $c->add(PostPeer::IS_PUBLISHED, true); } }

• Template customization

Generatedmodule

_edit_* : actions, footer, form, header, messages_list_* : footer, header, messages, td_actions, t(d|h)_stacked, t(d|h)_tabular_filters, editSuccess, listSuccess

Page 18: symfony: Simplify your professional web development with PHP (Symfony PHP Quebec 2007)

PHP Quebec 2007 www.symfony-project.com [email protected] www.sensio.com

Frontend Creation• Routing

<?php echo link_to( $post->getTitle(), '@post?id=’.$post->getId()) ?>

post: param: { module: blog, action: show } requirements:

id: \d+ url: /blog/:id.html

<?php echo url_for('@homepage') ?>homepage:

param: { module: blog, action: recent } url: /

/blog/1.html

/

homepage:

param: { module: blog, action: list } url: /

recent: param: { module: blog, action: recent } url: /recent

/

/recent

Page 19: symfony: Simplify your professional web development with PHP (Symfony PHP Quebec 2007)

PHP Quebec 2007 www.symfony-project.com [email protected] www.sensio.com

Functional Tests• Navigation simulation // test/functional/frontend/blogActionsTest.php $browser = new sfTestBrowser(); $browser->initialize(); $browser-> get('/blog/1.html')-> isStatusCode(200)-> checkResponseElement('h1.title', '/PHP Québec/');

$ ./symfony test-functional frontend# get /ok 1 - status code is 200not ok 2 - response selector h1 does not match regex /PHP Québec/# Looks like you failed 1 tests of 21..2

TDDTest Driven Development

CSS Selector

Page 20: symfony: Simplify your professional web development with PHP (Symfony PHP Quebec 2007)

PHP Quebec 2007 www.symfony-project.com [email protected] www.sensio.com

Our first line of code# apps/frontend/modules/blog/actions/actions.class.phpclass blogActions extends sfActions{ function executeShow() { $id = $this->getRequestParameter('id'); $this->post = PostPeer::retrieveByPk($id); $this->forward404Unless($this->post); }}

# apps/frontend/modules/post/templates/showSuccess.php<h1 class="title"><?php echo $post->getTitle() ?></h1><h2>par <?php echo $post->getAuthor()->getFullName() ?></h2><p><?php echo $post->getHtmlContent(ESC_RAW) ?></p>

MVCModel / View / Controller

XSSSecure by defaultshortcut

Page 21: symfony: Simplify your professional web development with PHP (Symfony PHP Quebec 2007)

PHP Quebec 2007 www.symfony-project.com [email protected] www.sensio.com

Debugging tools• Web Debug Toolbar

Page 22: symfony: Simplify your professional web development with PHP (Symfony PHP Quebec 2007)

PHP Quebec 2007 www.symfony-project.com [email protected] www.sensio.com

Debugging tools• Error messages

Page 23: symfony: Simplify your professional web development with PHP (Symfony PHP Quebec 2007)

PHP Quebec 2007 www.symfony-project.com [email protected] www.sensio.com

Deployment$ ./symfony test-allfunctional/frontend/postActionsTest......................okAll tests successful.Files=1, Tests=2

# config/properties.ini[production] host=1.2.3.4 user=fabien dir=/var/www/sfblog type=rsync

$ ./symfony sync production go

$ ./symfony freeze

Page 24: symfony: Simplify your professional web development with PHP (Symfony PHP Quebec 2007)

PHP Quebec 2007 www.symfony-project.com [email protected] www.sensio.com

Community Plugins• New plugins are created every week

– Doctrine : Full Doctrine ORM support– UJS : Unobtrusive JavaScript– PropelActAsNestedSetBehavior : Nested sets for

Propel– SuperCache : HTML pages cache– ControlPanel : Web management for symfony projects– ErrorLogger : All 404 and 500 logging in a table– Guard : Authentication and authorization features– Feed2 : Web feeds management– PokaYoke : Client side validation

Page 25: symfony: Simplify your professional web development with PHP (Symfony PHP Quebec 2007)

PHP Quebec 2007 www.symfony-project.com [email protected] www.sensio.com

What’s next?• Forge : www.symfony-forge.com• New features for symfony 1.1 :

– More hooks for plugins– More modularity– Doctrine support– Unobstrusive JavaScript support– New form and validation framework

• Book translation

中文, Deutsch, Español, FrançaisPolski, Russian, 日本語, Italiano, …

Page 26: symfony: Simplify your professional web development with PHP (Symfony PHP Quebec 2007)

PHP Quebec 2007 www.symfony-project.com [email protected] www.sensio.com

A Professional Web Framework

• Built from experience• 1.0 stable, maintained with commercial support• Growing community

– Developpers in more than 80 countries– 100 000 visitors per month on symfony-project.com

• Open-Source Documentation– The book (450 pages - GFDL)– Askeet Tutorial (250 pages)

Page 27: symfony: Simplify your professional web development with PHP (Symfony PHP Quebec 2007)

PHP Quebec 2007 www.symfony-project.com [email protected] www.sensio.com

A symfony User• Yahoo! (USA)

– Yahoo! Bookmarks– 20 millions users– Web 2.0 / AJAX

Page 28: symfony: Simplify your professional web development with PHP (Symfony PHP Quebec 2007)

PHP Quebec 2007 www.symfony-project.com [email protected] www.sensio.com

Rejoignez-nous - Join Us• Sensio Labs recrute en France

– Des développeurs– Des chefs de projet technique

• Le Web est l’une de vos passions ?– Développeur : Vous avez une expérience dans le

développement de sites Web en PHP voire ensymfony. Vous développez en PHP5 objets, vousconnaissez l’AJAX.

– Chef de Projet : Vous êtes développeur et voussouhaitez gérer des projets pour des grands comptes.

Page 29: symfony: Simplify your professional web development with PHP (Symfony PHP Quebec 2007)

PHP Quebec 2007 www.symfony-project.com [email protected] www.sensio.com

SENSIO S.A.26, rue Salomon de Rothschild

92 286 SURESNES cedexFRANCE

Tél. : +33 1 40 99 80 80Fax : +33 1 40 99 83 34

ContactFabien Potencier

[email protected]

http://www.sensio.com/ http://www.symfony-project.com/