symfony - PHP Quebecconf.phpquebec.com/slides/2007/symfony-PHPQuebec-2007-en.pdf · PHP Quebec 2007 fabien.potencier@sensio.com
Post on 13-May-2020
5 Views
Preview:
Transcript
PHP Quebec 2007 www.symfony-project.com fabien.potencier@sensio.com www.sensio.com
symfonySimplify your professional
web development with PHP
Fabien Potencierhttp://www.symfony-project.com/
http://www.sensio.com/
PHP Quebec 2007 www.symfony-project.com fabien.potencier@sensio.com 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
PHP Quebec 2007 www.symfony-project.com fabien.potencier@sensio.com 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
PHP Quebec 2007 www.symfony-project.com fabien.potencier@sensio.com 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
PHP Quebec 2007 www.symfony-project.com fabien.potencier@sensio.com 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
PHP Quebec 2007 www.symfony-project.com fabien.potencier@sensio.com 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
PHP Quebec 2007 www.symfony-project.com fabien.potencier@sensio.com 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
PHP Quebec 2007 www.symfony-project.com fabien.potencier@sensio.com 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
PHP Quebec 2007 www.symfony-project.com fabien.potencier@sensio.com 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
PHP Quebec 2007 www.symfony-project.com fabien.potencier@sensio.com 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
PHP Quebec 2007 www.symfony-project.com fabien.potencier@sensio.com 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
PHP Quebec 2007 www.symfony-project.com fabien.potencier@sensio.com 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
PHP Quebec 2007 www.symfony-project.com fabien.potencier@sensio.com 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
PHP Quebec 2007 www.symfony-project.com fabien.potencier@sensio.com 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
PHP Quebec 2007 www.symfony-project.com fabien.potencier@sensio.com www.sensio.com
Admin Generator• List
PHP Quebec 2007 www.symfony-project.com fabien.potencier@sensio.com www.sensio.com
Admin Generator• Edition
__toString()
widgets m2m relationship
PHP Quebec 2007 www.symfony-project.com fabien.potencier@sensio.com 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
PHP Quebec 2007 www.symfony-project.com fabien.potencier@sensio.com 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
PHP Quebec 2007 www.symfony-project.com fabien.potencier@sensio.com 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
PHP Quebec 2007 www.symfony-project.com fabien.potencier@sensio.com 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
PHP Quebec 2007 www.symfony-project.com fabien.potencier@sensio.com www.sensio.com
Debugging tools• Web Debug Toolbar
PHP Quebec 2007 www.symfony-project.com fabien.potencier@sensio.com www.sensio.com
Debugging tools• Error messages
PHP Quebec 2007 www.symfony-project.com fabien.potencier@sensio.com 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
PHP Quebec 2007 www.symfony-project.com fabien.potencier@sensio.com 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
PHP Quebec 2007 www.symfony-project.com fabien.potencier@sensio.com 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, …
PHP Quebec 2007 www.symfony-project.com fabien.potencier@sensio.com 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)
PHP Quebec 2007 www.symfony-project.com fabien.potencier@sensio.com www.sensio.com
A symfony User• Yahoo! (USA)
– Yahoo! Bookmarks– 20 millions users– Web 2.0 / AJAX
PHP Quebec 2007 www.symfony-project.com fabien.potencier@sensio.com 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.
PHP Quebec 2007 www.symfony-project.com fabien.potencier@sensio.com 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
fabien.potencier@sensio.com
http://www.sensio.com/ http://www.symfony-project.com/
top related