Professional Documents
Culture Documents
A bit of history
symfony 1.0 – January 2007
• Started as a glue between existing Open-Source libraries:
– Mojavi (heavily modified), Propel, Prado i18n, …
• Borrowed concepts from other languages and frameworks:
– Routing, CLI, functional tests, YAML, Rails helpers…
• Added new concepts to the mix
– Web Debug Toolbar, admin generator, configuration cascade, …
symfony 1.2 – November 2008
• Based on decoupled but cohesive components
require_once __DIR__.'/../blog/BlogKernel.php';
use Symfony\Framework\WebBundle\Controller;
namespace Application\HelloBundle\Controller;
namespace Application\HelloBundle\Controller;
namespace Application\HelloBundle\Controller;
namespace Application\HelloBundle\Controller;
namespace Application\HelloBundle\Controller;
namespace Application\HelloBundle\Controller;
$configuration
->mergeExtension('web.user',
array('default_culture' => 'fr', 'session' => array('name' => 'SYMFONY',
'type' => 'Native', 'lifetime' => 3600)))
->mergeExtension('doctrine.dbal',
array('dbname' => 'sfweb', 'username' => 'root'))
->mergeExtension('web.templating',
array('escaping' => 'htmlspecialchars', 'assets_version' =>
'SomeVersionScheme'))
->mergeExtension('swift.mailer',
array('transport' => 'gmail', 'username' => 'fabien.potencier',
'password' => 'xxxxxx')) PHP
;
web.user:
default_culture: fr
session: { name: SYMFONY, type: Native, lifetime: 3600 }
web.templating:
escaping: htmlspecialchars
assets_version: SomeVersionScheme
swift.mailer:
transport: gmail
username: fabien.potencier
password: xxxxxxxx
YAML
<web:user default_culture="fr">
<web:session name="SYMFONY" type="Native" lifetime="3600" />
</web:user>
<web:templating
escaping="htmlspecialchars"
assets_version="SomeVersionScheme" />
<swift:mailer
transport="gmail"
username="fabien.potencier"
password="xxxxxxxx" />
XML
$configuration->mergeExtension('swift.mailer', array(
'transport' => 'gmail',
'username' => 'fabien.potencier',
'password' => 'xxxxxx',
));
PHP
swift.mailer:
transport: gmail
username: fabien.potencier
password: xxxxxxxx
YAML
<swift:mailer
transport="gmail"
username="fabien.potencier"
password="xxxxxxxx" />
XML
<?xml version="1.0" ?>
<container xmlns="http://www.symfony-project.org/schema/dic/services"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance »
xmlns:doctrine="http://www.symfony-project.org/schema/dic/doctrine"
xmlns:zend="http://www.symfony-project.org/schema/dic/zend"
xmlns:swift="http://www.symfony-project.org/schema/dic/swiftmailer"
>
XML
<?xml version="1.0" ?>
<container xmlns="http://www.symfony-project.org/schema/dic/services"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance »
xmlns:doctrine="http://www.symfony-project.org/schema/dic/doctrine"
xmlns:zend="http://www.symfony-project.org/schema/dic/zend"
xmlns:swift="http://www.symfony-project.org/schema/dic/swiftmailer"
xsi:schemaLocation="http://www.symfony-project.org/schema/dic/services
http://www.symfony-project.org/schema/dic/services/services-1.0.xsd
http://www.symfony-project.org/schema/dic/doctrine
http://www.symfony-project.org/schema/dic/doctrine/doctrine-1.0.xsd
http://www.symfony-project.org/schema/dic/zend http://
www.symfony-project.org/schema/dic/zend/zend-1.0.xsd
http://www.symfony-project.org/schema/dic/swiftmailer
http://www.symfony-project.org/schema/dic/swiftmailer/swiftmailer-1.0.xsd »>
XML
Inherit them as much as you want
Mix and match
configuration files written in any
format
useful when using third-party plugins
<imports>
<import resource="parent.xml" />
<import resource="config.yml" />
Mix and match formats
<import resource="parameters.ini" />
</imports>
<zend:logger
priority="debug"
path="%kernel.logs_dir%/%kernel.environment%.log"
/>
<web:debug
exception="%kernel.debug%"
toolbar="%kernel.debug%"
ide="textmate"
/>
You choose the format you want
Pros Cons
XML validation verbose (not that much)
IDE completion & help
XML
<swift:mailer
transport="smtp"
encryption="ssl"
auth_mode="login"
host="smtp.gmail.com"
username="fabien.potencier"
password="xxxxxxxx" />
XML
<parameters>
<parameter key="swiftmailer.class">Swift_Mailer</parameter>
<parameter key="swiftmailer.transport.smtp.class">Swift_Transport_EsmtpTransport</parameter>
<parameter key="swiftmailer.transport.smtp.host">smtp.gmail.com</parameter>
<parameter key="swiftmailer.transport.smtp.port">25</parameter>
<parameter key="swiftmailer.transport.smtp.encryption">ssl</parameter>
<parameter key="swiftmailer.transport.smtp.username">fabien.potencier</parameter>
<parameter key="swiftmailer.transport.smtp.password">xxxxxx</parameter>
<parameter key="swiftmailer.transport.smtp.auth_mode">login</parameter>
<parameter key="swiftmailer.init_file">swift_init.php</parameter>
</parameters>
<services>
<call method="setHost"><argument>%swiftmailer.transport.smtp.host%</argument></call>
<call method="setPort"><argument>%swiftmailer.transport.smtp.port%</argument></call>
<call method="setEncryption"><argument>%swiftmailer.transport.smtp.encryption%</argument></call>
<call method="setUsername"><argument>%swiftmailer.transport.smtp.username%</argument></call>
<call method="setPassword"><argument>%swiftmailer.transport.smtp.password%</argument></call>
<call method="setAuthMode"><argument>%swiftmailer.transport.smtp.auth_mode%</argument></call>
</service>
XML
</service>
Application\SomeBundle
Bundle\SomeBundle
Symfony\Framework\SomeBundle
Less concepts…
but more powerful ones
symfony 1 View Layer
templates
layouts
slots
components
partials
component slots
Symfony 2 View Layer
templates
slots
A layout is just another template with _content as a special slot
forum:
resource: ForumBundle/Resources/config/routing.yml
prefix: /forum
Symfony 2
is a lazy framework
Smart Autoloading
require_once __DIR__.'/vendor/symfony/src/Symfony/Foundation/UniversalClassLoader.php';
use Symfony\Foundation\UniversalClassLoader;
on Twitter @fabpot
on Github github.com/fabpot
…
http://symfony-reloaded.org/
Questions?
My slides will be available on
http://slideshare.com/fabpot
Sensio S.A.
92-98, boulevard Victor Hugo
92 115 Clichy Cedex
FRANCE
Tél. : +33 1 40 99 80 80
Contact
Fabien Potencier
fabien.potencier at sensio.com
http://www.sensiolabs.com/
http://www.symfony-project.org/
http://fabien.potencier.org/