<?xml version="1.0" encoding="UTF-8"?>

<rss version='2.0' 
     xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule"
     xmlns:doap="http://usefulinc.com/ns/doap#"
     xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">

    <channel>
        <!-- This XML Feed shows details for the page symfony 
             and everything recently tagged symfony -->
        <creativeCommons:license>http://creativecommons.org/licenses/by-sa/2.5/
          </creativeCommons:license>
        <title>symfony on SWiK</title>
        <doap:name>symfony</doap:name>
        <doap:description>&lt;p&gt;Symfony is an open-source &lt;a class="wikilink" href="http://swik.net/PHP5"&gt;&lt;span class="caps"&gt;PHP5&lt;/span&gt;&lt;/a&gt; &lt;a class="wikilink" href="http://swik.net/web-framework"&gt;web-framework&lt;/a&gt;&lt;/p&gt;


	&lt;p&gt;Based on the best practices of web development, throughly tried on several active websites, symfony aims to speed up the creation and maintenance of web applications, and to replace the repetitive coding tasks by power, control and pleasure.&lt;/p&gt;


	&lt;p&gt;Symfony provides a lot of features seamlessly integrated together, such as:&lt;/p&gt;


	&lt;ul&gt;
	&lt;li&gt;simple templating and helpers&lt;/li&gt;
		&lt;li&gt;cache management&lt;/li&gt;
		&lt;li&gt;smart URLs&lt;/li&gt;
		&lt;li&gt;&lt;a class="wikilink" href="http://swik.net/scaffolding"&gt;scaffolding&lt;/a&gt;&lt;/li&gt;
		&lt;li&gt;multilingualism and &lt;a class="wikilink" href="http://swik.net/I18N"&gt;&lt;span class="caps"&gt;I18N&lt;/span&gt;&lt;/a&gt; support&lt;/li&gt;
		&lt;li&gt;object model and &lt;a class="wikilink" href="http://swik.net/MVC"&gt;&lt;span class="caps"&gt;MVC&lt;/span&gt;&lt;/a&gt; separation&lt;/li&gt;
		&lt;li&gt;&lt;a class="wikilink" href="http://swik.net/Ajax"&gt;Ajax&lt;/a&gt; support&lt;/li&gt;
		&lt;li&gt;enterprise ready&lt;/li&gt;
	&lt;/ul&gt;
</doap:description>
        <description>Symfony is an open-source PHP5 web-framework


	Based on the best practices of web development, throughly tried on several active websites, symfony aims to speed up the creation and maintenance of web applications, and to replace the repetitive coding tasks by power, control and pleasure.


	Symfony provides a lot of features seamlessly integrated together, such as:


	
	simple templating and helpers
		cache management
		smart URLs
		scaffolding
		multilingualism and I18N support
		object model </description> 
	  <!-- see doap:description for full description -->
        <link>http://swik.net/symfony</link>
        <doap:homepage>http://www.symfony-project.com/</doap:homepage>
                <category>symfony</category>
        <category>Web</category>
        <category>Framework</category>
        <category>MVC</category>
        <category>PHP</category>
        <category>php5</category>
        <category>web-framework</category>
        <category>License:MIT</category>

        <pubDate>Thu, 20 Oct 2005 18:00:04 -0700</pubDate>
        <lastBuildDate>Fri, 09 Jun 2006 16:42:55 -0700</lastBuildDate>
            
        <item>
            <title>A week of symfony #88 (1-&gt;7 september 2008)</title>
            <link>http://swik.net/symfony/symfony+project+weblog/A+week+of+symfony+%2388+%281-%3E7+september+2008%29/cdzvl</link>
            <description>&lt;p&gt;Symfony continued this week adding cool new features for the upcoming 1.2 version. The routing framework will be refactored to allow further customization and complete RESTful architecture. In addition, Propel plugin development showed an immense activity during this week.&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Development mailing list&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Discussions about &lt;a href=&quot;http://groups.google.com/group/symfony-devs/browse_thread/thread/f8fb3a5219c512d6&quot;&gt;how to handle email sends in 1.1 plugin&lt;/a&gt; and &lt;a href=&quot;http://groups.google.com/group/symfony-devs/browse_thread/thread/d0e73617c15329b5&quot;&gt;sf1.1 / sfForm / FCKeditor widget&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Development highlights&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://trac.symfony-project.org/changeset/11274&quot;&gt;r11274&lt;/a&gt;, &lt;a href=&quot;http://trac.symfony-project.org/changeset/11276&quot;&gt;r11276&lt;/a&gt;: [1.1, 1.2] added a way to set the &quot;value&quot; attribute value of a checkbox&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://trac.symfony-project.org/changeset/11277&quot;&gt;r11277&lt;/a&gt;: [1.2] removed getMethodName() usage in core + changed deprecated log to a warning&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://trac.symfony-project.org/changeset/11278&quot;&gt;r11278&lt;/a&gt;, &lt;a href=&quot;http://trac.symfony-project.org/changeset/11279&quot;&gt;r11279&lt;/a&gt;: [1.1, 1.2] renamed valueAttributeValue to value_attribute_value (coding standard and api consistency) &lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://trac.symfony-project.org/changeset/11280&quot;&gt;r11280&lt;/a&gt;, &lt;a href=&quot;http://trac.symfony-project.org/changeset/11281&quot;&gt;r11281&lt;/a&gt;: [1.1, 1.2] fixed sfCacheClearTask: clear all type if not defined app&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://trac.symfony-project.org/changeset/11286&quot;&gt;r11286&lt;/a&gt;: [1.2] removed log messages that do not give valuable information&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://trac.symfony-project.org/changeset/11287&quot;&gt;r11287&lt;/a&gt;: [1.2] removed log from sfWebRequest &lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://trac.symfony-project.org/changeset/11293&quot;&gt;r11293&lt;/a&gt;: [1.2] removed the application name as an argument for Propel task in favor of an optional option&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://trac.symfony-project.org/changeset/11297&quot;&gt;r11297&lt;/a&gt;, &lt;a href=&quot;http://trac.symfony-project.org/changeset/11298&quot;&gt;r11298&lt;/a&gt;: [1.1, 1.2] fixed parsing of star parameter creating empty param&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://trac.symfony-project.org/changeset/11301&quot;&gt;r11301&lt;/a&gt;: [1.2] added confirmation when inserting the SQL statements&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;http://trac.symfony-project.org/changeset/11313&quot;&gt;r11313&lt;/a&gt;: [1.2] First part of the routing refactoring (WIP)&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://trac.symfony-project.org/changeset/11319&quot;&gt;r11319&lt;/a&gt;: [1.2] renamed method_name to method in the routing context&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://trac.symfony-project.org/changeset/11338&quot;&gt;r11338&lt;/a&gt;: [1.1, 1.2] fixed sfBaseTask so that it notifies the same event as sfTask&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://trac.symfony-project.org/changeset/11339&quot;&gt;r11339&lt;/a&gt;: [1.2] fixed Propel Peer classes guessing&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://trac.symfony-project.org/changeset/11341&quot;&gt;r11341&lt;/a&gt;: [1.2] allow a task alias to be a fully qualified name (with a namespace)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://trac.symfony-project.org/changeset/11343&quot;&gt;r11343&lt;/a&gt;: [1.2] rename propel:generate-crud to propel:generate-module&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://trac.symfony-project.org/changeset/11344&quot;&gt;r11344&lt;/a&gt;: [1.2] added support for PUT and DELETE for the link_to() helper&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://trac.symfony-project.org/changeset/11347&quot;&gt;r11347&lt;/a&gt;: [1.2] moved extra parameters from routing to request attributes&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://trac.symfony-project.org/changeset/11349&quot;&gt;r11349&lt;/a&gt;: [1.2] fixed default form format name when generating a CRUD module&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://trac.symfony-project.org/changeset/11353&quot;&gt;r11353&lt;/a&gt;: [1.2] added support for PUT and DELETE methods to the form_tag() helper&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://trac.symfony-project.org/changeset/11354&quot;&gt;r11354&lt;/a&gt;: [1.2] added false as a value that removes the attribute from a widget tag&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://trac.symfony-project.org/changeset/11356&quot;&gt;r11356&lt;/a&gt;: [1.2] added sfForm::renderFormTag() method&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://trac.symfony-project.org/changeset/11361&quot;&gt;r11361&lt;/a&gt;, &lt;a href=&quot;http://trac.symfony-project.org/changeset/11362&quot;&gt;r11362&lt;/a&gt;: [1.1, 1.2] fixed cloning of widgetformschema fails to clone formatter correctly&lt;/li&gt;
&lt;li&gt;Updated &lt;a href=&quot;http://trac.symfony-project.com/trac/browser/branches/dwhittle&quot;&gt;dwhittle&lt;/a&gt; branch&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://trac.symfony-project.com/trac/timeline?from=09%2F07%2F2008&amp;daysback=6&amp;milestone=on&amp;ticket=on&amp;changeset=on&amp;update=Update&quot;&gt;...and many other changes&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Development digest&lt;/strong&gt;: 107 changesets, 30 defects created, 15 defects closed, 5 enhancements created, 1 enhancement closed, 6 documentation defects created, 8 documentation defects closed and 17 documentation edits.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Book and documentation&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Created &lt;a href=&quot;http://trac.symfony-project.org/wiki/SymfonyYamlMyqlWorkbenchPlugin&quot;&gt;Symfony YAML MySQL Workbench Plugin&lt;/a&gt; page&lt;/li&gt;
&lt;li&gt;Updated &lt;a href=&quot;http://trac.symfony-project.org/wiki/HowToContributeWithSvk&quot;&gt;contributing to Symfony with SVK&lt;/a&gt;, &lt;a href=&quot;http://trac.symfony-project.org/browser/branches/1.2/UPGRADE_TO_1_2&quot;&gt;Upgrade to 1.2&lt;/a&gt; pages&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Wiki&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;New &lt;a href=&quot;http://trac.symfony-project.com/trac/wiki/SymfonyBloggers&quot;&gt;symfony blogger&lt;/a&gt;:
  &lt;ul&gt;
    &lt;li&gt;Obvious Hints (&lt;a href=&quot;http://obvioushints.blogspot.com/search/label/symfony&quot;&gt;website&lt;/a&gt;, &lt;a href=&quot;http://obvioushints.blogspot.com/feeds/posts/default/-/symfony&quot;&gt;feed&lt;/a&gt;)&lt;/li&gt;
  &lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Plugins&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;New plugins&lt;/strong&gt;
  &lt;ul&gt;
    &lt;li&gt;&lt;a href=&quot;http://www.symfony-project.org/plugins/sfHtml2TextPlugin&quot;&gt;sfHtml2TextPlugin&lt;/a&gt;: provides an abstraction and autoloading of &lt;a href=&quot;http://www.chuggnutt.com/html2text.php&quot;&gt;html2text class&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;http://www.symfony-project.org/plugins/sfPHPUnitTestPlugin&quot;&gt;sfPHPUnitTestPlugin&lt;/a&gt;: unit/functional testing replacement for symfony&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;http://www.symfony-project.org/plugins/sfStatisticsPlugin&quot;&gt;sfStatisticsPlugin&lt;/a&gt;: an easy-to-use tool for reports (chart and data table) creating based on the Propel Model through Google Chart API&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;http://www.symfony-project.org/plugins/tbFriendfeedClientPlugin&quot;&gt;tbFriendfeedClientPlugin&lt;/a&gt;: a FriendFeed client plugin&lt;/li&gt;
  &lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Updated plugins&lt;/strong&gt;
  &lt;ul&gt;
    &lt;li&gt;&lt;a href=&quot;http://www.symfony-project.org/plugins/sfPropelPlugin&quot;&gt;sfPropelPlugin&lt;/a&gt;:
      &lt;ul&gt;
        &lt;li&gt;[migration]: added index size parameter and -&gt;unique() convenience method to column abstraction class, normalized sfPropelIndex::asPropel() signature, added -&gt;getCreateIndexStatement() to DDL builder extensions, reorganized sfPropelBaseTask for better reusability, added sfWidgetFormPropelSelectRadio.class.php, added prove.php test script to run all plugin tests, removed transaction from sqlite drop column statement in favor of PDO::beginTransaction(), added -&gt;create() and -&gt;drop() terminator methods to model abstraction classes, removed DDL builder class from propel.ini to avoid an unnecessary upgrade step, added convenience create/add and drop methods to column and index abstraction classes that accept a string table name parameter, ported recognition of special column names from sfPropelDatabaseSchema to abstraction layer, added sfPropelTable::columns() to facilitate prettier code, added migration class for creating migration log table, added static propel model classes for migration log table, added autoIncrement attribute to fixture statements, rewrote base migration and manager classes to handle namespaces, added sfPropelMigrationSchema class for acting upon a collection of migration classes, updated migration tasks to use new manager and schema classes, moved migrations from project/plugin data to lib directory, removed propel.ini directive to disable migrations, improved DRY in builder and model abstraction layer, added test suite, updated migration log table, model classes and migration, updated execution of a collection of SQL statements to ignore exceptions per Propel&#039;s example, addressed MSSQL drop table bug, fixed how migration schema builds its revision range, added confirmation to backward migration of the migration namespace, changed all application arguments to options, added autoload registration for bundled plugin model directory, eliminated use of sfProjectConfiguration::getActive() where possible, eliminated use of sfSimpleAutoload where possible, added some helpful error messages&lt;/li&gt;
        &lt;li&gt;[behavior]: added sfWidgetFormPropelSelectRadio.class.php, removed the application name as an argument for Propel task in favor of an optional option&lt;/li&gt;
        &lt;li&gt;[trunk]: removed the application name as an argument for Propel task in favor of an optional option, added confirmation when inserting the SQL statements, fixed Propel Peer classes guessing, rename propel:generate-crud to propel:generate-module, fixed default form format name when generating a CRUD module, made form class name customizable in the CRUD generator, changed the default list variable name in the generated CRUD module, added sfForm::renderFormTag() method&lt;/li&gt;
      &lt;/ul&gt;
    &lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;http://www.symfony-project.org/plugins/smFaceliftPlugin&quot;&gt;smFaceliftPlugin&lt;/a&gt;: converted the included files into classes &lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;http://www.symfony-project.org/plugins/sfDoctrineGuardPlugin&quot;&gt;sfDoctrineGuardPlugin&lt;/a&gt;: moved signin form to allow override, added translation to signin template&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;http://www.symfony-project.org/plugins/sfPropelAuditPlugin&quot;&gt;sfPropelAuditPlugin&lt;/a&gt;: created folder for symfony 1.0 releases and restored previous releases (1.0.0 and 1.0.1)&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;http://www.symfony-project.org/plugins/sfLanguageSwitchPlugin&quot;&gt;sfLanguageSwitchPlugin&lt;/a&gt;: added trunk and tags directories, added branches directory, moved release 0.0.1 to tags directory, rewritten some parts of source, removed some flags, rewritten documentation, added automatic switch for sf 1.0 and 1.1, updated package.xml, released 0.0.2 version&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;http://www.symfony-project.org/plugins/sfPropelActAsNestedSetBehaviorPlugin&quot;&gt;sfPropelActAsNestedSetBehaviorPlugin&lt;/a&gt;: added boolean type cast to match phpdoc function signatures&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;http://www.symfony-project.org/plugins/ysfYUIPlugin&quot;&gt;ysfYUIPlugin&lt;/a&gt;: added note to README about declaring yui-skin-sam class to body tag to get styling working &lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;http://www.symfony-project.org/plugins/sfExtjsThemePlugin&quot;&gt;sfExtjsThemePlugin&lt;/a&gt;: fixed the problem with local grouping, fixed the problem with double sort statements when grouping, removed obsolete Ext.ux.form.Checkbox folder, added new override to fix Checkbox alignment in IE, added new override to add getValue and setValue to RadioGroup, added new override to BoxComponent so button can extend it, added new Ext.ux.BoxButton so Button extends BoxComponent, uses same button xtype, cleaned up actions.class.php in the generator to remove a lot of commented obsolete code &lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;http://www.symfony-project.org/plugins/sfFormtasticPlugin&quot;&gt;sfFormtasticPlugin&lt;/a&gt;: fixed bug when calling -&gt;renderHiddenFields() on a form with an error schema&lt;/li&gt;
  &lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Some new symfony powered websites&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.groups.pikaba.com/&quot;&gt;Social Group Buy&lt;/a&gt;: (english) social shopping service allowed to organize and execute buying groups&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.lifejack.de&quot;&gt;LifeJack&lt;/a&gt;: ebay-like site for life assurances&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.ullright.org&quot;&gt;ullright&lt;/a&gt;: (english) framework and application suite providing helpful tools to support workflows and company-internal administration/organisation in general&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.zamanzar.com&quot;&gt;Zamanzar&lt;/a&gt;: (english) real estate portal with thousands of Indian real estate listings&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.animalo.pl&quot;&gt;Animalo.pl&lt;/a&gt;: (polish) an online community for Pet Owners&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;They talked about us&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.nexen.net/actualites/php/18675-atelier_de_performances_pour_les_frameworks.php&quot;&gt;Atelier de performances pour les frameworks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.symfony.es/2008/09/02/pequenas-grandes-novedades-de-symfony-12/&quot;&gt;Pequeñas grandes novedades de Symfony 1.2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://seric.at/blog/2008/09/02/symfony-12-introduces-rest/&quot;&gt;Symfony 1.2 introduces REST&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://linuxfr.org/2008/09/03/24449.html&quot;&gt;InDefero, clone Google Code en version 0.1.0&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://derentwickler.de/itr/news/psecom,id,43597,nodeid,55.html&quot;&gt;Vorschau auf Symfony 1.2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://arpeggios.wordpress.com/2008/09/04/handling-several-propel-packages/&quot;&gt;Handling several Propel packages&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.symfony.es/2008/09/04/se-acerca-el-symfony-camp-2008/&quot;&gt;Se acerca el Symfony Camp 2008&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://451f.com.ua/2008/09/05/new-in-symfony-1-2-toward-a-restful-architecture-part-1/&quot;&gt;Новинки в symfony 1.2 или движемся к простой архитектуре (Часть 1)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.sajithmr.com/amvizone-beta-is-live/&quot;&gt;Amvizone - Beta is Live&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://netbeans.dzone.com/news/netbeans-support-cake-php-symf&quot;&gt;NetBeans Support for Cake PHP, Symfony, Prado, Zend Framework, Smarty or ... ?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://symfonynerds.com/blog/?p=106&quot;&gt;Good Symfony 1.1 Forms Introduction&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.symfonylab.com/time-to-change-skin/&quot;&gt;Time to change skin&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://derantihype.wordpress.com/2008/09/05/vorschau-auf-symfony-12/&quot;&gt;Vorschau auf Symfony 1.2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://d.hatena.ne.jp/Kiske/20080905/1220580302&quot;&gt;sfMemcachePluginでcacheのlifetimeが有効になってなかったので修正した&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://willy.boerland.com/myblog/sign_up_for_the_symfony_camp_at_dop&quot;&gt;Sign up for the Symfony Camp at DOP&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.entwicklungsgedanken.de/2008/09/03/sql-join-with-multiple-conditions-when-using-propel/&quot;&gt;SQL-Join with multiple conditions when using Propel&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.vinch.be/blog/2008/09/02/mon-premier-site-realise-avec-symfony/&quot;&gt;Mon premier site réalisé avec symfony...&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.codeandeffect.co.uk/blog/2008/programming/hard-found-gains-in-symfony/&quot;&gt;Hard found gains in Symfony&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/symfony/blog/~4/386075406&quot; height=&quot;1&quot; width=&quot;1&quot;/&gt;</description>
            
            <pubDate>Sun, 07 Sep 2008 14:59:42 -0700</pubDate>
        </item>
            
        <item>
            <title>sfshop - Google Code</title>
            <link>http://swik.net/open-source/del.icio.us+tag%2Fopen-source/sfshop+-+Google+Code/cdyny</link>
            <description>sfShop is Open Source online shop e-commerce platform. This platform can use anybody for build online shop e-commerce solution. The paltform is available for free under the MIT License and any developer can take part in development.</description>
            
            <pubDate>Sun, 07 Sep 2008 06:01:18 -0700</pubDate>
        </item>
            
        <item>
            <title>Call the expert: How to implement a conditional validator?</title>
            <link>http://swik.net/symfony/symfony+project+weblog/Call+the+expert%3A+How+to+implement+a+conditional+validator%3F/cds6l</link>
            <description>&lt;p&gt;Jon works on a symfony 1.1 project with a classic login form.&lt;/p&gt;

&lt;p&gt;The form is composed of two fields: a username and a password.
The validation rules are quite straightforward:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;He wants each field to be required&lt;/li&gt;
&lt;li&gt;He wants to check the correctness of the password&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Here is the first implementation of the login form:&lt;/p&gt;

&lt;pre class=&quot;php&quot;&gt;&lt;span class=&quot;kw2&quot;&gt;class&lt;/span&gt; loginForm &lt;span class=&quot;kw2&quot;&gt;extends&lt;/span&gt; sfForm
&lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
  &lt;span class=&quot;kw2&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; configure&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
  &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
    &lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;-&amp;gt;&lt;span class=&quot;me1&quot;&gt;setWidgets&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;kw3&quot;&gt;array&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;
      &lt;span class=&quot;st0&quot;&gt;&#039;username&#039;&lt;/span&gt;  =&amp;gt; &lt;span class=&quot;kw2&quot;&gt;new&lt;/span&gt; sfWidgetFormInput&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;,
      &lt;span class=&quot;st0&quot;&gt;&#039;password&#039;&lt;/span&gt;  =&amp;gt; &lt;span class=&quot;kw2&quot;&gt;new&lt;/span&gt; sfWidgetFormInputPassword&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;,
    &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;;
&amp;nbsp;
    &lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;-&amp;gt;&lt;span class=&quot;me1&quot;&gt;setValidators&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;kw3&quot;&gt;array&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;
      &lt;span class=&quot;st0&quot;&gt;&#039;username&#039;&lt;/span&gt; =&amp;gt; &lt;span class=&quot;kw2&quot;&gt;new&lt;/span&gt; sfValidatorString&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;kw3&quot;&gt;array&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&#039;required&#039;&lt;/span&gt; =&amp;gt; &lt;span class=&quot;kw2&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;,
      &lt;span class=&quot;st0&quot;&gt;&#039;password&#039;&lt;/span&gt; =&amp;gt; &lt;span class=&quot;kw2&quot;&gt;new&lt;/span&gt; sfValidatorString&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;kw3&quot;&gt;array&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&#039;required&#039;&lt;/span&gt; =&amp;gt; &lt;span class=&quot;kw2&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;,
    &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;;
&amp;nbsp;
    &lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;-&amp;gt;&lt;span class=&quot;me1&quot;&gt;widgetSchema&lt;/span&gt;-&amp;gt;&lt;span class=&quot;me1&quot;&gt;setNameFormat&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&#039;login[%s]&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;;
  &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;&lt;/pre&gt;

&lt;p&gt;This form enforces the requirements on the username and password fields but does not check the correctness of the password.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://www.symfony-project.org/uploads/assets/call_the_expert/1/1.png&quot; alt=&quot;First implementation of the login form&quot;/&gt;&lt;/p&gt;

&lt;p&gt;The password can only be validated if you also have access to the username value. But as you might know, a validator attached to a field does not have access to the other values of the form.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;When a validator relies on another submitted value, you need to create a post validator&lt;/strong&gt;. A post validator is executed after all other validators and is given the whole array of cleaned up values.&lt;/p&gt;

&lt;p&gt;To check the password, we will implement a simple callback validator to ensure that the submitted password is equal to the username. Of course, for his real project, Jon will have to call the model layer to do the actual work.&lt;/p&gt;

&lt;p&gt;Here is the modified login form with the added post validator:&lt;/p&gt;

&lt;pre class=&quot;php&quot;&gt;&lt;span class=&quot;kw2&quot;&gt;class&lt;/span&gt; loginForm &lt;span class=&quot;kw2&quot;&gt;extends&lt;/span&gt; sfForm
&lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
  &lt;span class=&quot;kw2&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; configure&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
  &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
    &lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;-&amp;gt;&lt;span class=&quot;me1&quot;&gt;setWidgets&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;kw3&quot;&gt;array&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;
      &lt;span class=&quot;st0&quot;&gt;&#039;username&#039;&lt;/span&gt;  =&amp;gt; &lt;span class=&quot;kw2&quot;&gt;new&lt;/span&gt; sfWidgetFormInput&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;,
      &lt;span class=&quot;st0&quot;&gt;&#039;password&#039;&lt;/span&gt;  =&amp;gt; &lt;span class=&quot;kw2&quot;&gt;new&lt;/span&gt; sfWidgetFormInputPassword&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;,
    &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;;
&amp;nbsp;
    &lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;-&amp;gt;&lt;span class=&quot;me1&quot;&gt;setValidators&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;kw3&quot;&gt;array&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;
      &lt;span class=&quot;st0&quot;&gt;&#039;username&#039;&lt;/span&gt; =&amp;gt; &lt;span class=&quot;kw2&quot;&gt;new&lt;/span&gt; sfValidatorString&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;kw3&quot;&gt;array&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&#039;required&#039;&lt;/span&gt; =&amp;gt; &lt;span class=&quot;kw2&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;,
      &lt;span class=&quot;st0&quot;&gt;&#039;password&#039;&lt;/span&gt; =&amp;gt; &lt;span class=&quot;kw2&quot;&gt;new&lt;/span&gt; sfValidatorString&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;kw3&quot;&gt;array&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&#039;required&#039;&lt;/span&gt; =&amp;gt; &lt;span class=&quot;kw2&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;,
    &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;;
&amp;nbsp;
    &lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;-&amp;gt;&lt;span class=&quot;me1&quot;&gt;widgetSchema&lt;/span&gt;-&amp;gt;&lt;span class=&quot;me1&quot;&gt;setNameFormat&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&#039;login[%s]&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;;
&amp;nbsp;
    &lt;span class=&quot;co1&quot;&gt;// add a post validator&lt;/span&gt;
    &lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;-&amp;gt;&lt;span class=&quot;me1&quot;&gt;validatorSchema&lt;/span&gt;-&amp;gt;&lt;span class=&quot;me1&quot;&gt;setPostValidator&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;
      &lt;span class=&quot;kw2&quot;&gt;new&lt;/span&gt; sfValidatorCallback&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;kw3&quot;&gt;array&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&#039;callback&#039;&lt;/span&gt; =&amp;gt; &lt;span class=&quot;kw3&quot;&gt;array&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;, &lt;span class=&quot;st0&quot;&gt;&#039;checkPassword&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
    &lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;;
  &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
  &lt;span class=&quot;kw2&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; checkPassword&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$validator&lt;/span&gt;, &lt;span class=&quot;re0&quot;&gt;$values&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
  &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
    &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$values&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&#039;password&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt; != &lt;span class=&quot;re0&quot;&gt;$values&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&#039;username&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
    &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
      &lt;span class=&quot;co1&quot;&gt;// password is not correct, throw an error&lt;/span&gt;
      throw &lt;span class=&quot;kw2&quot;&gt;new&lt;/span&gt; sfValidatorError&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$validator&lt;/span&gt;, &lt;span class=&quot;st0&quot;&gt;&#039;Invalid password&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;;
    &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;co1&quot;&gt;// password is correct, return the clean values&lt;/span&gt;
    &lt;span class=&quot;kw1&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$values&lt;/span&gt;;
  &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;&lt;/pre&gt;

&lt;p&gt;Now, the form works as expected, but Jon does not like one small thing: if you submit a random password without entering a username, you will have two error messages: a required error for the username and a global error for the wrong password.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://www.symfony-project.org/uploads/assets/call_the_expert/1/2.png&quot; alt=&quot;Two error messages&quot;/&gt;&lt;/p&gt;

&lt;p&gt;But wait a minute, if the username is empty, we don&#039;t need to validate the password. Let&#039;s change the form to only validate the password if there is a username submitted. This is quite simple, as we just need to ensure that &lt;code&gt;$values[&#039;username&#039;]&lt;/code&gt; is not empty in the post validator callback:&lt;/p&gt;

&lt;pre class=&quot;php&quot;&gt;&lt;span class=&quot;kw2&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; checkPassword&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$validator&lt;/span&gt;, &lt;span class=&quot;re0&quot;&gt;$values&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
&lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
  &lt;span class=&quot;co1&quot;&gt;// before validating the password, check that the username is not empty&lt;/span&gt;
  &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;!&lt;span class=&quot;kw3&quot;&gt;empty&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$values&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&#039;username&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &amp;amp;&amp;amp; &lt;span class=&quot;re0&quot;&gt;$values&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&#039;password&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt; != &lt;span class=&quot;re0&quot;&gt;$values&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&#039;username&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
  &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
    throw &lt;span class=&quot;kw2&quot;&gt;new&lt;/span&gt; sfValidatorError&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$validator&lt;/span&gt;, &lt;span class=&quot;st0&quot;&gt;&#039;Invalid password&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;;
  &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
  &lt;span class=&quot;kw1&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$values&lt;/span&gt;;
&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;&lt;/pre&gt;

&lt;p&gt;As Jon is quite fussy, he would rather have the &#039;Invalid password&#039; error message just above the password field instead of having a global error.&lt;/p&gt;

&lt;p&gt;That&#039;s quite easy to accomplish by throwing an error bound to the &lt;code&gt;password&lt;/code&gt; field instead of throwing a global error:&lt;/p&gt;

&lt;pre class=&quot;php&quot;&gt;&lt;span class=&quot;kw2&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; checkPassword&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$validator&lt;/span&gt;, &lt;span class=&quot;re0&quot;&gt;$values&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
&lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
  &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;!&lt;span class=&quot;kw3&quot;&gt;empty&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$values&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&#039;username&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &amp;amp;&amp;amp; &lt;span class=&quot;re0&quot;&gt;$values&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&#039;password&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt; != &lt;span class=&quot;re0&quot;&gt;$values&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&#039;username&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
  &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
    &lt;span class=&quot;re0&quot;&gt;$error&lt;/span&gt; = &lt;span class=&quot;kw2&quot;&gt;new&lt;/span&gt; sfValidatorError&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$validator&lt;/span&gt;, &lt;span class=&quot;st0&quot;&gt;&#039;Invalid password&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;;
&amp;nbsp;
    &lt;span class=&quot;co1&quot;&gt;// throw an error bound to the password field&lt;/span&gt;
    throw &lt;span class=&quot;kw2&quot;&gt;new&lt;/span&gt; sfValidatorErrorSchema&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$validator&lt;/span&gt;, &lt;span class=&quot;kw3&quot;&gt;array&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&#039;password&#039;&lt;/span&gt; =&amp;gt; &lt;span class=&quot;re0&quot;&gt;$error&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;;
  &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
  &lt;span class=&quot;kw1&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$values&lt;/span&gt;;
&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;&lt;/pre&gt;

&lt;p&gt;&lt;img src=&quot;http://www.symfony-project.org/uploads/assets/call_the_expert/1/3.png&quot; alt=&quot;Error message bound to a field&quot;/&gt;&lt;/p&gt;

&lt;p&gt;Jon is now happy with his login form and he is ready to take up the next challenge.&lt;/p&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/symfony/blog/~4/384142858&quot; height=&quot;1&quot; width=&quot;1&quot;/&gt;</description>
            
            <pubDate>Fri, 05 Sep 2008 06:07:30 -0700</pubDate>
        </item>
            
        <item>
            <title>http://www.steercms-project.org/</title>
            <link>http://swik.net/opensource/del.icio.us+tag%2Fopensource/http%3A%2F%2Fwww.steercms-project.org%2F/cdpwj</link>
            <description></description>
            
            <pubDate>Thu, 04 Sep 2008 08:58:32 -0700</pubDate>
        </item>
            
        <item>
            <title>symfony | Web PHP Framework | Plugins | dgDojoPlugin | 0.1.1</title>
            <link>http://swik.net/Dojo/del.icio.us+tag+dojo/symfony+%7C+Web+PHP+Framework+%7C+Plugins+%7C+dgDojoPlugin+%7C+0.1.1/cdo9d</link>
            <description></description>
            
            <pubDate>Thu, 04 Sep 2008 05:59:45 -0700</pubDate>
        </item>
            
        <item>
            <title>New in symfony 1.2: Toward a RESTful architecture (Part 1)</title>
            <link>http://swik.net/symfony/symfony+project+weblog/New+in+symfony+1.2%3A+Toward+a+RESTful+architecture+%28Part+1%29/cdn6m</link>
            <description>&lt;p&gt;Yesterday, I have committed the first slew of changes to the routing framework.
Thanks to this refactoring, developers have new opportunities to customize the routing and this will allow very cool features in the very near future.&lt;/p&gt;

&lt;p&gt;But today, let&#039;s dive into the goodness of the symfony 1.2 routing framework.&lt;/p&gt;

&lt;h2&gt;Routes as first-class objects&lt;/h2&gt;

&lt;p&gt;Before symfony 1.2, the routing system (via the &lt;code&gt;sfPatternRouting&lt;/code&gt; class) stored its routes as an associative array. It works quite well but does not allow for easy customization. To give developers the freedom to easily enhance the routing process, the routes are now stored as an array of &lt;code&gt;sfRoute&lt;/code&gt; objects.&lt;/p&gt;

&lt;p&gt;This refactoring is totally backward compatible and nothing need to be changed in your &lt;code&gt;routing.yml&lt;/code&gt; configuration file.&lt;/p&gt;

&lt;blockquote class=&quot;caution&quot;&gt;&lt;p&gt;
  If you connect your routes with PHP code, you must now pass a &lt;code&gt;sfRoute&lt;/code&gt; instance
  as the second argument to the &lt;code&gt;connect()&lt;/code&gt;, &lt;code&gt;preprendRoute()&lt;/code&gt;, &lt;code&gt;appendRoute()&lt;/code&gt;,
  and &lt;code&gt;insertRouteBefore()&lt;/code&gt; methods:&lt;/p&gt;

&lt;pre class=&quot;php&quot;&gt;&lt;span class=&quot;re0&quot;&gt;$routing&lt;/span&gt;-&amp;gt;&lt;span class=&quot;me1&quot;&gt;connect&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&#039;foo_bar&#039;&lt;/span&gt;, &lt;span class=&quot;kw2&quot;&gt;new&lt;/span&gt; sfRoute&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&#039;/foo/:bar&#039;&lt;/span&gt;, &lt;span class=&quot;kw3&quot;&gt;array&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&#039;module&#039;&lt;/span&gt; =&amp;gt; &lt;span class=&quot;st0&quot;&gt;&#039;foo&#039;&lt;/span&gt;, &lt;span class=&quot;st0&quot;&gt;&#039;action&#039;&lt;/span&gt; =&amp;gt; &lt;span class=&quot;st0&quot;&gt;&#039;bar&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;;
&amp;nbsp;&lt;/pre&gt;
&lt;/blockquote&gt;

&lt;h2&gt;Route customization&lt;/h2&gt;

&lt;p&gt;The &lt;code&gt;sfRoute&lt;/code&gt; constructor takes an array of options as its last argument to allow the customization of each route.
In the &lt;code&gt;routing.yml&lt;/code&gt; configuration file, use to &lt;code&gt;options&lt;/code&gt; key to override defaults:&lt;/p&gt;

&lt;pre&gt;article:
  url:     /article/:id-:slug
  options: { segment_separators: [/, ., -] }
&amp;nbsp;&lt;/pre&gt;

&lt;p&gt;The &lt;code&gt;segment_separators&lt;/code&gt; option sets the characters that can separate each segment of the pattern. In the previous example,
we explicitly add the &lt;code&gt;-&lt;/code&gt; (dash) character as a valid separator to the two default built-in separators (&lt;code&gt;/&lt;/code&gt; and &lt;code&gt;.&lt;/code&gt;).
This allows a URL like &lt;code&gt;/article/1-my_article_title&lt;/code&gt; to match the route with an &lt;code&gt;id&lt;/code&gt; variable of &lt;code&gt;1&lt;/code&gt; and a &lt;code&gt;slug&lt;/code&gt; variable of
&lt;code&gt;my_article_title&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;This option was already available in symfony 1.1, but you were only allowed to change it globally. By adding
new separators globally, you could have potentially broken third-party routes (like the ones defined in plugins).&lt;/p&gt;

&lt;p&gt;Beside the options already available, there are two new options:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;generate_shortest_url&lt;/code&gt;:            Whether to generate the shortest URL possible&lt;/li&gt;
&lt;li&gt;&lt;code&gt;extra_parameters_as_query_string&lt;/code&gt;: Whether to generate extra parameters as a query string&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These options can be configured globally for the routing or locally for each route.
By default, they are set to &lt;code&gt;false&lt;/code&gt; in &lt;code&gt;factories.yml&lt;/code&gt; to keep backward compatibility with previous symfony versions.&lt;/p&gt;

&lt;p&gt;Let&#039;s see how to use these options to customize a route:&lt;/p&gt;

&lt;pre&gt;articles:
  url:     /articles/:page
  param:   { module: article, action: list, page: 1 }
  options: { generate_shortest_url: true }
&amp;nbsp;&lt;/pre&gt;

&lt;p&gt;This route will generate the shortest URL possible. So, if you pass a &lt;code&gt;page&lt;/code&gt;
of &lt;code&gt;1&lt;/code&gt;, which is the default value for the &lt;code&gt;page&lt;/code&gt; variable, the generated URL will be &lt;code&gt;/articles&lt;/code&gt;:&lt;/p&gt;

&lt;pre class=&quot;php&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;echo&lt;/span&gt; url_for&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&#039;@articles?page=1&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;; &lt;span class=&quot;co1&quot;&gt;// generates /articles&lt;/span&gt;
&lt;span class=&quot;co1&quot;&gt;// would have been /articles/1 in symfony 1.1&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;kw3&quot;&gt;echo&lt;/span&gt; url_for&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&#039;@articles?page=2&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;; &lt;span class=&quot;co1&quot;&gt;// generates /articles/2&lt;/span&gt;
&amp;nbsp;&lt;/pre&gt;

&lt;p&gt;Let&#039;s take another example to illustrate &lt;code&gt;extra_parameters_as_query_string&lt;/code&gt; usage:&lt;/p&gt;

&lt;pre&gt;articles:
  url:     /articles
  options: { extra_parameters_as_query_string: true }
&amp;nbsp;&lt;/pre&gt;

&lt;p&gt;This route will accept extra parameters that are not valid variables for the route
and add them as a query string:&lt;/p&gt;

&lt;pre class=&quot;php&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;echo&lt;/span&gt; url_for&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&#039;@articles?page=1&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;; &lt;span class=&quot;co1&quot;&gt;// generates /articles?page=1&lt;/span&gt;
&lt;span class=&quot;co1&quot;&gt;// would not have matched the route in symfony 1.1&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;kw3&quot;&gt;echo&lt;/span&gt; url_for&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&#039;@articles?page=2&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;; &lt;span class=&quot;co1&quot;&gt;// generates /articles?page=2&lt;/span&gt;
&amp;nbsp;&lt;/pre&gt;

&lt;p&gt;As this option can change the matching route depending on your configuration, enable it with care if you are upgrading an existing project.
But as the test browser uses the routing process, you will just have to launch your functional test suite to check if it breaks something.&lt;/p&gt;

&lt;h2&gt;Routing customization&lt;/h2&gt;

&lt;p&gt;All the logic from the &lt;code&gt;sfPatternRouting&lt;/code&gt; routing class has been moved to the &lt;code&gt;sfRoute&lt;/code&gt; object:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;When an HTTP request comes in, the routing object asks each route in turn if it matches the URL.&lt;/li&gt;
&lt;li&gt;And when you want to generate a URL, the routing object asks each route in turn if it is able to generate a URL for the given parameters.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;By embarking all the logic in the route class, it is just a matter of creating a new route class to change the behavior of the parsing or generation process.&lt;/p&gt;

&lt;p&gt;If you want to change the default route class used by a route, add a &lt;code&gt;class&lt;/code&gt; key to your route configuration like this:&lt;/p&gt;

&lt;pre&gt;article:
  url:   /article/:id
  param: { module: article, action: index }
  class: myRoute
&amp;nbsp;&lt;/pre&gt;

&lt;p&gt;With this routing configuration, symfony will use the &lt;code&gt;myRoute&lt;/code&gt; class for the &lt;code&gt;article&lt;/code&gt; route, instead of the built-in &lt;code&gt;sfRoute&lt;/code&gt; class. It is now up to you to override the default behaviors.&lt;/p&gt;

&lt;blockquote class=&quot;tip&quot;&gt;&lt;p&gt;
  The &lt;code&gt;sfRoute&lt;/code&gt; class is much more modular than the old &lt;code&gt;sfPatternRouting&lt;/code&gt; class
  to allow easier customization of the default behavior. The &quot;compilation&quot; phase
  has been refactored into smaller methods, the code has been simplified,
  and it is now based on a &quot;real&quot; tokenizer.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;The built-in &lt;code&gt;sfRequestRoute&lt;/code&gt;&lt;/h2&gt;

&lt;p&gt;Symfony has another built-in route, &lt;code&gt;sfRequestRoute&lt;/code&gt;, which can enforce the HTTP method during the matching process:&lt;/p&gt;

&lt;pre&gt;article:
  url:          /article/:id
  requirements: { sf_method: get }
  class:        sfRequestRoute
&amp;nbsp;&lt;/pre&gt;

&lt;p&gt;With the previous routing configuration, the &lt;code&gt;article&lt;/code&gt; route will only match
requests with a &lt;code&gt;GET&lt;/code&gt; HTTP method.&lt;/p&gt;

&lt;p&gt;If you define several routes with the same &lt;code&gt;url&lt;/code&gt; but different method requirements, you can pass &lt;code&gt;sf_method&lt;/code&gt; as a parameter
when you generate a route:&lt;/p&gt;

&lt;pre class=&quot;php&quot;&gt;&lt;span class=&quot;kw2&quot;&gt;&amp;lt;?php&lt;/span&gt; &lt;span class=&quot;kw3&quot;&gt;echo&lt;/span&gt; link_to&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&#039;Great article&#039;&lt;/span&gt;, &lt;span class=&quot;st0&quot;&gt;&#039;@article?id=1&amp;amp;sf_method=get&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;?&amp;gt;&lt;/span&gt;
&amp;nbsp;&lt;/pre&gt;

&lt;p&gt;This is made possible because the routing is now aware of the request context.
When the request calls the routing, it passes the following context:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;method&lt;/code&gt;:      The HTTP method&lt;/li&gt;
&lt;li&gt;&lt;code&gt;format&lt;/code&gt;:      The request format&lt;/li&gt;
&lt;li&gt;&lt;code&gt;host&lt;/code&gt;:        The hostname&lt;/li&gt;
&lt;li&gt;&lt;code&gt;is_secure&lt;/code&gt;:   Whether the request was called with HTTPS or not&lt;/li&gt;
&lt;li&gt;&lt;code&gt;request_uri&lt;/code&gt;: The full request URI&lt;/li&gt;
&lt;li&gt;&lt;code&gt;prefix&lt;/code&gt;:      The prefix to add to each generated route&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The &lt;code&gt;sfRequestRoute&lt;/code&gt; is the first step towards a RESTful architecture.&lt;/p&gt;

&lt;h2&gt;What&#039;s next?&lt;/h2&gt;

&lt;p&gt;In the next part, we will see how symfony manages
resources by automatically generating RESTful routes based on a simple configuration of &lt;code&gt;routing.yml&lt;/code&gt;.
We will also learn how to cut the code you have to write in your actions, thanks to the built-in integration of Propel and Doctrine.&lt;/p&gt;

&lt;p&gt;Last but not least, I will talk about the new routing framework at &lt;a href=&quot;http://www.symfonycamp.com/&quot;&gt;symfonyCamp&lt;/a&gt; with even more examples and a live demo.
So, if you want to learn more about symfony 1.2 and if you are not already registered, you can still &lt;a href=&quot;http://www.symfonycamp.com/registration/create&quot;&gt;join the 60 people&lt;/a&gt; who will be there to share their symfony experience.&lt;/p&gt;

&lt;blockquote class=&quot;tip&quot;&gt;&lt;p&gt;
  If you want to follow the progress of symfony 1.2 or if you want to know all the changes we have made for symfony 1.2,
  you can periodically check the &lt;a href=&quot;http://www.symfony-project.org/installation/1_2/upgrade&quot;&gt;upgrade to symfony 1.2&lt;/a&gt; page
  where all changes and news features are documented in real-time.&lt;/p&gt;
&lt;/blockquote&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/symfony/blog/~4/383017604&quot; height=&quot;1&quot; width=&quot;1&quot;/&gt;</description>
            
            <pubDate>Wed, 03 Sep 2008 23:54:34 -0700</pubDate>
        </item>
            
        <item>
            <title>symfony trac</title>
            <link>http://swik.net/Trac/del.icio.us%2Ftag%2Ftrac/symfony+trac/cdka6</link>
            <description></description>
            
            <pubDate>Wed, 03 Sep 2008 02:01:02 -0700</pubDate>
        </item>
            
        <item>
            <title>New in symfony 1.2: Small things matter</title>
            <link>http://swik.net/symfony/symfony+project+weblog/New+in+symfony+1.2%3A+Small+things+matter/cdh9p</link>
            <description>&lt;p&gt;As for every symfony version, we try to simplify the API and make it more intuitive and powerful.
Here are some examples that you will soon enjoy in symfony 1.2.&lt;/p&gt;

&lt;h2&gt;Application name in CLI tasks&lt;/h2&gt;

&lt;p&gt;Some Propel tasks take an application name as an argument because they need to connect
to the database. This is sometimes counter-intuitive as some other Propel tasks do not require this argument.&lt;/p&gt;

&lt;p&gt;As of symfony 1.2, this argument has been removed in favor of an optional &quot;application&quot; option.
If you don&#039;t provide the &quot;application&quot; option, symfony will take the database configuration from the project &lt;code&gt;databases.yml&lt;/code&gt; file,
which is the behavior you expect most of the time.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;propel:build-all-load&lt;/code&gt; now behaves like any other &lt;code&gt;propel:build-*&lt;/code&gt; task:&lt;/p&gt;

&lt;pre class=&quot;php&quot;&gt;&lt;span class=&quot;co2&quot;&gt;# symfony 1.2&lt;/span&gt;
./symfony propel:build-all-load
&amp;nbsp;
&lt;span class=&quot;co2&quot;&gt;# symfony 1.1&lt;/span&gt;
./symfony propel:build-all-load application_name
&amp;nbsp;&lt;/pre&gt;

&lt;p&gt;You can also load data fixtures or dump your database to YAML with the following commands:&lt;/p&gt;

&lt;pre class=&quot;php&quot;&gt;./symfony propel:data-load
./symfony propel:data-dump
&amp;nbsp;&lt;/pre&gt;

&lt;p&gt;Of course you can still provide an application if you need a specific configuration:&lt;/p&gt;

&lt;pre class=&quot;php&quot;&gt;./symfony propel:buil-all-load --application=frontend
&amp;nbsp;&lt;/pre&gt;

&lt;h2&gt;Native &lt;code&gt;PUT&lt;/code&gt; and &lt;code&gt;DELETE&lt;/code&gt; support from the browser&lt;/h2&gt;

&lt;p&gt;You can now simulate &lt;code&gt;PUT&lt;/code&gt; and &lt;code&gt;DELETE&lt;/code&gt; requests from a browser by using the
&lt;code&gt;POST&lt;/code&gt; method and by adding a special &lt;code&gt;sf_method&lt;/code&gt; hidden parameter:&lt;/p&gt;

&lt;pre class=&quot;php&quot;&gt;&amp;lt;form action=&lt;span class=&quot;st0&quot;&gt;&amp;quot;#&amp;quot;&lt;/span&gt; method=&lt;span class=&quot;st0&quot;&gt;&amp;quot;POST&amp;quot;&lt;/span&gt;&amp;gt;
  &amp;lt;input type=&lt;span class=&quot;st0&quot;&gt;&amp;quot;hidden&amp;quot;&lt;/span&gt; name=&lt;span class=&quot;st0&quot;&gt;&amp;quot;sf_method&amp;quot;&lt;/span&gt; value=&lt;span class=&quot;st0&quot;&gt;&amp;quot;PUT&amp;quot;&lt;/span&gt; /&amp;gt;
&amp;nbsp;
  &amp;lt;!-- &lt;span class=&quot;co1&quot;&gt;// ... --&amp;gt;&lt;/span&gt;
&amp;lt;/form&amp;gt;
&amp;nbsp;&lt;/pre&gt;

&lt;p&gt;With such a form, a call to &lt;code&gt;sfRequest::getMethod()&lt;/code&gt; will return &lt;code&gt;PUT&lt;/code&gt;.
Stay tuned for more new features that will enable easy and native RESTful applications in symfony.&lt;/p&gt;

&lt;h2&gt;Shortcuts in the response&lt;/h2&gt;

&lt;p&gt;Sometimes, you need to get the stylesheets or the JavaScripts from the current response.
But the &lt;code&gt;getStylesheets()&lt;/code&gt; and &lt;code&gt;getJavascripts()&lt;/code&gt; method returns the internal representation of the information, which is not what you expect.&lt;/p&gt;

&lt;p&gt;As of symfony 1.2, these two methods return the information in a ready-to-be-used, de-duplicated, and ordered format:&lt;/p&gt;

&lt;pre class=&quot;php&quot;&gt;&lt;span class=&quot;kw3&quot;&gt;array&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;
  &lt;span class=&quot;st0&quot;&gt;&#039;bar.css&#039;&lt;/span&gt; =&amp;gt; &lt;span class=&quot;kw3&quot;&gt;array&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;,
  &lt;span class=&quot;st0&quot;&gt;&#039;foo.css&#039;&lt;/span&gt; =&amp;gt; &lt;span class=&quot;kw3&quot;&gt;array&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;,
&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
&amp;nbsp;&lt;/pre&gt;

&lt;h2&gt;&lt;code&gt;sfValidatorSchemaCompare&lt;/code&gt; validator&lt;/h2&gt;

&lt;p&gt;The &lt;code&gt;sfValidatorSchemaCompare&lt;/code&gt; constant values have been changed. The following two examples are now equivalent:&lt;/p&gt;

&lt;pre class=&quot;php&quot;&gt;&lt;span class=&quot;co1&quot;&gt;// symfony 1.1 and 1.2&lt;/span&gt;
&lt;span class=&quot;re0&quot;&gt;$v&lt;/span&gt; = &lt;span class=&quot;kw2&quot;&gt;new&lt;/span&gt; sfValidatorSchemaCompare&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&#039;left&#039;&lt;/span&gt;, sfValidatorSchemaCompare::&lt;span class=&quot;me2&quot;&gt;EQUAL&lt;/span&gt;, &lt;span class=&quot;st0&quot;&gt;&#039;right&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;;
&amp;nbsp;
&lt;span class=&quot;co1&quot;&gt;// symfony 1.2 only&lt;/span&gt;
&lt;span class=&quot;re0&quot;&gt;$v&lt;/span&gt; = &lt;span class=&quot;kw2&quot;&gt;new&lt;/span&gt; sfValidatorSchemaCompare&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&#039;left&#039;&lt;/span&gt;, &lt;span class=&quot;st0&quot;&gt;&#039;==&#039;&lt;/span&gt;, &lt;span class=&quot;st0&quot;&gt;&#039;right&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;;
&amp;nbsp;&lt;/pre&gt;

&lt;p&gt;The new one is much more readable and intuitive.&lt;/p&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/symfony/blog/~4/381639702&quot; height=&quot;1&quot; width=&quot;1&quot;/&gt;</description>
            
            <pubDate>Tue, 02 Sep 2008 12:55:34 -0700</pubDate>
        </item>
            
        <item>
            <title>Symfony-Zone &quot; Developing Symfony with Eclipse</title>
            <link>http://swik.net/Eclipse/del.icio.us%2Ftag%2Feclipse/Symfony-Zone+%22+Developing+Symfony+with+Eclipse/cde1h</link>
            <description>http://download.eclipse.org/tools/pdt</description>
            
            <pubDate>Mon, 01 Sep 2008 16:59:32 -0700</pubDate>
        </item>
            
        <item>
            <title>Symfoclipse</title>
            <link>http://swik.net/Eclipse/del.icio.us%2Ftag%2Feclipse/Symfoclipse/cdek8</link>
            <description></description>
            
            <pubDate>Mon, 01 Sep 2008 13:58:53 -0700</pubDate>
        </item>
            
        <item>
            <title>SymfonyWithEclipseBasedEditors - symfony - Trac</title>
            <link>http://swik.net/Eclipse/del.icio.us%2Ftag%2Feclipse/SymfonyWithEclipseBasedEditors+-+symfony+-+Trac/cdee6</link>
            <description></description>
            
            <pubDate>Mon, 01 Sep 2008 12:59:59 -0700</pubDate>
        </item>
            
        <item>
            <title>Best Symfony IDE: Eclipse PDT + Symfoclipse + Clay | Symfony-framework.com</title>
            <link>http://swik.net/Eclipse/del.icio.us%2Ftag%2Feclipse/Best+Symfony+IDE%3A+Eclipse+PDT+%2B+Symfoclipse+%2B+Clay+%7C+Symfony-framework.com/cdee5</link>
            <description></description>
            
            <pubDate>Mon, 01 Sep 2008 12:59:59 -0700</pubDate>
        </item>
            
        <item>
            <title>Symfoclipse</title>
            <link>http://swik.net/Eclipse/del.icio.us%2Ftag%2Feclipse/Symfoclipse/cdd91</link>
            <description></description>
            
            <pubDate>Mon, 01 Sep 2008 11:59:36 -0700</pubDate>
        </item>
            
        <item>
            <title>Symfoclipse - Symfony Development Tools for Eclipse | Poetry of Programming</title>
            <link>http://swik.net/Eclipse/del.icio.us%2Ftag%2Feclipse/Symfoclipse+-+Symfony+Development+Tools+for+Eclipse+%7C+Poetry+of+Programming/cdckm</link>
            <description></description>
            
            <pubDate>Mon, 01 Sep 2008 01:59:32 -0700</pubDate>
        </item>
            
        <item>
            <title>SourceForge.net: uml2symfony</title>
            <link>http://swik.net/UML/del.icio.us+tag%2Fuml/SourceForge.net%3A+uml2symfony/cdbch</link>
            <description></description>
            
            <pubDate>Sun, 31 Aug 2008 15:56:06 -0700</pubDate>
        </item>
            
        <item>
            <title>ejemplos uml - symfony-es</title>
            <link>http://swik.net/UML/del.icio.us+tag%2Fuml/ejemplos+uml+-+symfony-es/cdbcg</link>
            <description></description>
            
            <pubDate>Sun, 31 Aug 2008 15:56:06 -0700</pubDate>
        </item>
            
        <item>
            <title>A week of symfony #87 (25-&gt;31 august 2008)</title>
            <link>http://swik.net/symfony/symfony+project+weblog/A+week+of+symfony+%2387+%2825-%3E31+august+2008%29/cda7z</link>
            <description>&lt;p&gt;This week, the refactorization of the web debug toolbar was completed, resulting in a much more powerful and flexible tool. In addition, this week started the refactorization of the admin generator, which will include &lt;a href=&quot;http://trac.symfony-project.org/wiki/SprintSymfony12AdminGenerator&quot;&gt;ideas suggested by symfony users&lt;/a&gt;. Development activity of the plugins was also remarkable, especially for sfPropelPlugin and DbFinderPlugin.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Development mailing list&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Discussions about &lt;a href=&quot;http://groups.google.com/group/symfony-devs/browse_thread/thread/c4da14959aa6e5d7&quot;&gt;model-Level validation&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Development highlights&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://trac.symfony-project.org/changeset/11089&quot;&gt;r11089&lt;/a&gt;: [1.2] added a sfWebResponse::ALL constant to be able to retrieve all javascripts and stylesheets without the position&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://trac.symfony-project.org/changeset/11096&quot;&gt;r11096&lt;/a&gt;: [1.1, 1.2] fixed default propel.ini file in the sandbox&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://trac.symfony-project.org/changeset/11098&quot;&gt;r11098&lt;/a&gt;: [1.2] fixed the behavior of the removeJavascript() and removeStylesheet() methods&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://trac.symfony-project.org/changeset/11102&quot;&gt;r11102&lt;/a&gt;: [1.2] changed the default position to sfWebResponse::ALL for the getStylesheets() and getJavascripts() methods&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://trac.symfony-project.org/changeset/11116&quot;&gt;r11116&lt;/a&gt;: [1.2] refactored browser and functional test classes&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://trac.symfony-project.org/changeset/11121&quot;&gt;r11121&lt;/a&gt;: [1.2] moved web debug toolbar from  to  for better readability of the source&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://trac.symfony-project.org/changeset/11129&quot;&gt;r11129&lt;/a&gt;: [1.1, 1.2] fixed sfWidgetFormPropelSelect rendering in a view has different behaviours depending on how it is called&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://trac.symfony-project.org/changeset/11153&quot;&gt;r11153&lt;/a&gt;, &lt;a href=&quot;http://trac.symfony-project.org/changeset/11155&quot;&gt;r11155&lt;/a&gt;: [1.1, 1.2] fixed sfWidgetFormSchema does not apply id_format to hidden fields&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://trac.symfony-project.org/changeset/11164&quot;&gt;r11164&lt;/a&gt;: [1.2] changed the sfWebDebugPanel method names&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://trac.symfony-project.org/changeset/11166&quot;&gt;r11166&lt;/a&gt;, &lt;a href=&quot;http://trac.symfony-project.org/changeset/11167&quot;&gt;r11167&lt;/a&gt;: [1.1, 1.2] fixed sfWebRequest::getRequestFormat does not handle latest webkit&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://trac.symfony-project.org/changeset/11173&quot;&gt;r11173&lt;/a&gt;: [1.2] removed creole dependencies&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://trac.symfony-project.org/changeset/11202&quot;&gt;r11202&lt;/a&gt;: [1.2] added the possibility to pass an array to url_for() and link_to() with the route name&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://trac.symfony-project.org/changeset/11205&quot;&gt;r11205&lt;/a&gt;: [1.2] moved Propel web debug panel to the Propel plugin&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://trac.symfony-project.org/changeset/11254&quot;&gt;r11254&lt;/a&gt;: [1.2] added support for PUT and DELETE methods from a browser&lt;/li&gt;
&lt;li&gt;Updated &lt;a href=&quot;http://trac.symfony-project.com/trac/browser/branches/dwhittle&quot;&gt;dwhittle&lt;/a&gt; branch&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://trac.symfony-project.com/trac/timeline?from=08%2F31%2F2008&amp;daysback=6&amp;milestone=on&amp;ticket=on&amp;changeset=on&amp;update=Update&quot;&gt;...and many other changes&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Development digest&lt;/strong&gt;: 173 changesets, 26 defects created, 16 defects closed, 7 enhancements created, 4 enhancements closed, 7 documentation defects created, 12 documentation defects closed and 72 documentation edits.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Book and documentation&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Created &lt;a href=&quot;http://www.symfony-project.org/cookbook/1_2/en/web_debug_toolbar&quot;&gt;How to customize the Web Debug Toolbar&lt;/a&gt; cookbook tutorial&lt;/li&gt;
&lt;li&gt;Created &lt;a href=&quot;http://trac.symfony-project.org/wiki/SprintSymfony12AdminGenerator&quot;&gt;Admin Generator 1.2 Sprint Notes&lt;/a&gt; page&lt;/li&gt;
&lt;li&gt;Updated &lt;a href=&quot;http://trac.symfony-project.org/wiki/ReservedWords&quot;&gt;Reserved words&lt;/a&gt;, &lt;a href=&quot;http://trac.symfony-project.org/wiki/Symfony12AdminGenerator&quot;&gt;Symfony 1.2 Admin Generator Development&lt;/a&gt;, &lt;a href=&quot;http://trac.symfony-project.org/wiki/ApplyingCustomJoinsUsingHelper&quot;&gt;applying custom joins using a helper class&lt;/a&gt; pages&lt;/li&gt;
&lt;li&gt;Updated &lt;a href=&quot;http://trac.symfony-project.org/wiki/Symfony11Documentation/myFirstProject&quot;&gt;My First Project tutorial&lt;/a&gt; for symfony 1.1&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Wiki&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;New &lt;a href=&quot;http://trac.symfony-project.com/trac/wiki/JobPostings&quot;&gt;Job Postings&lt;/a&gt;:
  &lt;ul&gt;
    &lt;li&gt;PHP Application Developer @ &lt;a href=&quot;http://current.com&quot;&gt;Current&lt;/a&gt; - full-time based in SOMA, San Francisco, CA - Contact: ctower [at] currentmedia [dot] com&lt;/li&gt;
  &lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;New &lt;a href=&quot;http://trac.symfony-project.com/trac/wiki/DevelopersForHire&quot;&gt;developers for hire&lt;/a&gt;:
  &lt;ul&gt;
    &lt;li&gt;&lt;a href=&quot;http://www.sierra-bravo.com&quot;&gt;Sierra Bravo&lt;/a&gt;: founded in 2003 and the largest independent web development firm in Minnesota, with more than 50 programmers on staff. Sierra Bravo creates practical, business-minded web solutions, including social media and Web 2.0 applications, e-commerce, content management systems, and customer relationship management tools.&lt;/li&gt;
  &lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;New &lt;a href=&quot;http://trac.symfony-project.com/trac/wiki/SymfonyBloggers&quot;&gt;symfony blogger&lt;/a&gt;:
  &lt;ul&gt;
    &lt;li&gt;symfonylab.blogspot (&lt;a href=&quot;http://symfonylab.blogspot.com/&quot;&gt;website&lt;/a&gt;, &lt;a href=&quot;http://symfonylab.blogspot.com/feeds/posts/default?alt=rss&quot;&gt;feed&lt;/a&gt;)&lt;/li&gt;
  &lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Plugins&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;New plugins&lt;/strong&gt;
  &lt;ul&gt;
    &lt;li&gt;&lt;a href=&quot;http://www.symfony-project.org/plugins/sfVideoGalleryPlugin&quot;&gt;sfVideoGalleryPlugin&lt;/a&gt;: dynamic video gallery plugin. The video gallery can be attached with any object of the database. So it is quite flexible in nature to adopt and contain the video files with any existing object. It also include ffmpeg converter so that the user can upload videos in any format which will be automatically converted into flv format.&lt;/li&gt;
    &lt;li&gt;Upcoming plugins: &lt;a href=&quot;http://www.symfony-project.org/plugins/sfMilkboxPlugin&quot;&gt;sfMilkboxPlugin&lt;/a&gt;, &lt;a href=&quot;http://www.symfony-project.org/plugins/trShopPlugin&quot;&gt;trShopPlugin&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Updated plugins&lt;/strong&gt;
  &lt;ul&gt;
    &lt;li&gt;&lt;a href=&quot;http://www.symfony-project.org/plugins/sfPropelPlugin&quot;&gt;sfPropelPlugin&lt;/a&gt;: added Propel model classes for migration log, added propel.ini directive to disable migrations, [1.3] restored sfMixer-style behaviors, connect phing build events to sfEventDispatcher, [migration branch] ported phing to symfony events, exposed build properties to propel tasks, modified base propel task to include schema files from bundled plugins, implemented propel.disableMigrations build property, fixes for sfFormPropel + sfWidgetFormPropelSelect, [1.2] removed the migration stuff, [migration] sketched out API for expansion of migration tasks to support namespaces, added beginnings of fluid interface for database-agnostic migrations, moved FK logic into column class, added single-column index method to column class, added phpdoc comments, added sfPropelTable::asCreateTableSql(), migration model -&gt;unwrap() methods now clone the internal object, moved creation of Propel object from constructor to terminators, removed magic layer in favor of an explicit API, extended Propel&#039;s DDL builder classes, added drop table support to abstraction layer, added drop index support to abstraction layer, added support for create and drop column to abstraction layer&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;http://www.symfony-project.org/plugins/sfMinifyPlugin&quot;&gt;sfMinifyPlugin&lt;/a&gt;: added 1.1 branch, updated README&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;http://www.symfony-project.org/plugins/sfFormExtraPlugin&quot;&gt;sfFormExtraPlugin&lt;/a&gt;: added CHANGELOG, updated README, updated package.xml&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;http://www.symfony-project.org/plugins/sfPhpExcelPlugin&quot;&gt;sfPhpExcelPlugin&lt;/a&gt;: upgraded to PHPExcel 1.6.3&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;http://www.symfony-project.org/plugins/sfExtjsThemePlugin&quot;&gt;sfExtjsThemePlugin&lt;/a&gt;: re-implemented row expander, changed Ext.ux.grid.CheckColumn to trigger the fire grid afteredit event, added editable check to Ext.ux.grid.CheckColumn? so it can be turned off (default is on), added check for expand_column.fields so it will be automatically added to the datastore, fixed a bug with partial generation not setting the file editable, implemented credentials for editing gridpanels, moved some things from the partial into the generator for the list/grid plugin config, improved configurability of grid.columns.editable, started fixing grouping&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;http://trac.symfony-project.org/wiki/DbFinderPlugin&quot;&gt;DbFinderPlugin&lt;/a&gt;: implemented sfDoctrine::withColumn(), partially implemented getColumn() getter (currently limited by Doctrine capabilities), implemented sfDoctrine::groupBy() and sfDoctrine::groupByClass(), [BC Break] withColumn() now accepts normal CamelCase syntax for calculated columns (count(Comment.Id) instead of count(comment.ID)), implemented sfDoctrineFinder::set(), sfDoctrineFinder::paginate() and sfDoctrineFinderPager, reorganized files into adapter folders, implemented sfDoctrineFinder::withI18n() which completes Doctrine adapter, released 0.9 version&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;http://www.symfony-project.org/plugins/sfAmfPlugin&quot;&gt;sfAmfPlugin&lt;/a&gt;: added Doctrine support, added PropelAdapter.php, fixed bugs in package.xml, adding annotation support for @AmfIgnore and @AmfClassMapping, added the AmfReturnType annotation &lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;http://www.symfony-project.org/plugins/sfFirePHPLoggerPlugin&quot;&gt;sfFirePHPLoggerPlugin&lt;/a&gt;: updated readme&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;http://www.symfony-project.org/plugins/sfMediaLibraryPlugin&quot;&gt;sfMediaLibraryPlugin&lt;/a&gt;: made the plugin compatible with both 1.0 and 1.1&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;http://www.symfony-project.org/plugins/sfFormtasticPlugin&quot;&gt;sfFormtasticPlugin&lt;/a&gt;: fixed sfFormtasticBase::setIdFormat(), cleaned up render methods for better DRY&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;http://www.symfony-project.org/plugins/sfMogileFSPlugin&quot;&gt;sfMogileFSPlugin&lt;/a&gt;: updated package.xml, made listKeys() arguments optional&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;http://www.symfony-project.org/plugins/sfPropelPollsPlugin&quot;&gt;sfPropelPollsPlugin&lt;/a&gt;: fixed package.xml&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;http://www.symfony-project.org/plugins/sfSimpleBlogPlugin&quot;&gt;sfSimpleBlogPlugin&lt;/a&gt;: changed calls to DbFinder::withColumn() to be compatible with DbFinder change, released 0.9.1 beta version&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;http://www.symfony-project.org/plugins/sfDoctrinePlugin&quot;&gt;sfDoctrinePlugin&lt;/a&gt;: updated Doctrine to 1.0.0-RC2 tag&lt;/li&gt;
  &lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Some new symfony powered websites&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.carhireflorida.net&quot;&gt;Car Hire Florida&lt;/a&gt;: (english) offering competitive car hire to UK holidaymakers staying in Florida, USA.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://volumeone.org&quot;&gt;Volume One&lt;/a&gt;: (english) web version of popular local magazine&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://www.kuidas.ee/&quot;&gt;Kuidas.ee&lt;/a&gt;: (estonian) how to do stuff instructions. Do It yourself&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;They talked about us&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.leftontheweb.com/message/Speaking_at_SymfonyCamp_2008&quot;&gt;Speaking at SymfonyCamp 2008&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.symfony-zone.com/wordpress/2008/08/25/flex-with-sfamfplugin-part-2/&quot;&gt;Flex with sfAmfPlugin part 2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.sensiolabs.com/blog/post/2008/08/25/SENSIO-LABS-presentera-symfony-11-au-salon-Paris-Capitale-du-Libre&quot;&gt;Sensio Labs présentera symfony 1.1 au salon Paris Capitale du Libre&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.symfony.es/2008/08/26/colabora-en-el-desarrollo-de-symfony-12/&quot;&gt;Colabora en el desarrollo de Symfony 1.2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://redotheweb.com/2008/08/28/sfpropelfinder-becomes-dbfinder-announcing-10-release/&quot;&gt;sfPropelFinder becomes DbFinder - Announcing 1.0 release&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://symfonynerds.com/blog/?p=96&quot;&gt;Symfony Tip: Sending emails with Symfony batch&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.symfony.es/2008/08/27/creando-aplicaciones-flex-con-symfony/&quot;&gt;Creando aplicaciones Flex con Symfony&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://redotheweb.com/2008/08/29/everybody-goes-to-symfony-camp/&quot;&gt;Everybody Goes to Symfony Camp&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://symfonylab.blogspot.com/2008/08/symfony1x-spaw2.html&quot;&gt;symfony1.x и spaw2 - интеграция&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.symfony.es/2008/08/28/mejoras-en-la-traduccion-de-la-documentacion-de-symfony/&quot;&gt;Mejoras en la traducción de la documentación de Symfony&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://blog.hma-info.de/2008/08/31/creative-writing-stress/&quot;&gt;Creative Writing Stress&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.symfonylab.com/symfonys-super-puper-cache-plugin/&quot;&gt;Symfony’s super puper cache plugin&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.symfony.es/2008/08/31/el-nuevo-generador-de-administraciones-de-symfony-12/&quot;&gt;El nuevo generador de administraciones de Symfony 1.2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://startup.dino.co.jp/2008/08/26/askeet_unit_test/&quot;&gt;askeetチュートリアル　15日目　『単体テスト』&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://webconsults.eu/archives/22-Webconsults-at-SymfonyCamp-2008.html&quot;&gt;Webconsults at SymfonyCamp 2008&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.envero.org/blog/2008/08/25/frameworks-web/&quot;&gt;Frameworks web&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.xuecs.com/blog/?p=94&quot;&gt;Symfony 1.1 framework — Control flow&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/symfony/blog/~4/379930919&quot; height=&quot;1&quot; width=&quot;1&quot;/&gt;</description>
            
            <pubDate>Sun, 31 Aug 2008 14:54:04 -0700</pubDate>
        </item>
            
        <item>
            <title>symfony | Web PHP Framework</title>
            <link>http://swik.net/opensource/del.icio.us+tag%2Fopensource/symfony+%7C+Web+PHP+Framework/cc8zb</link>
            <description></description>
            
            <pubDate>Sat, 30 Aug 2008 16:56:59 -0700</pubDate>
        </item>
            
        <item>
            <title>symfony | Web PHP Framework</title>
            <link>http://swik.net/opensource/del.icio.us+tag%2Fopensource/symfony+%7C+Web+PHP+Framework/cc4bn</link>
            <description>Framework do php para desenvolvimento com ajax simples e rápido</description>
            
            <pubDate>Fri, 29 Aug 2008 05:57:05 -0700</pubDate>
        </item>
            
        <item>
            <title>HowToInstallPearOnWindowsWithWamp - symfony - Trac</title>
            <link>http://swik.net/WAMP/del.icio.us%2Ftag%2Fwamp/HowToInstallPearOnWindowsWithWamp+-+symfony+-+Trac/cc0nq</link>
            <description></description>
            
            <pubDate>Thu, 28 Aug 2008 18:06:54 -0700</pubDate>
        </item>
            
        <item>
            <title>Propel 1.3, Doctrine 1.0, and symfony 1.2</title>
            <link>http://swik.net/symfony/symfony+project+weblog/Propel+1.3%2C+Doctrine+1.0%2C+and+symfony+1.2/cczq0</link>
            <description>&lt;p&gt;After more that &lt;a href=&quot;http://propel.phpdb.org/trac/changeset/428&quot;&gt;two years&lt;/a&gt; of development, the Propel team has &lt;a href=&quot;http://propel.phpdb.org/trac/wiki/Users/News/Propel1.3.0&quot;&gt;released Propel 1.3&lt;/a&gt; yesterday. This is a great achievement as Propel 1.3 sports a lot a &lt;a href=&quot;http://propel.phpdb.org/trac/wiki/Users/Documentation/1.3/Upgrading&quot;&gt;new exciting features&lt;/a&gt;. Here are some major features available in this version:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;PDO&lt;/strong&gt;: Propel 1.3 uses PDO to connect to the database which means that everything will be &lt;strong&gt;much faster&lt;/strong&gt; than before.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Object Instance Pooling&lt;/strong&gt;: For a given primary key, only one object instance will ever exist even with several calls to &lt;code&gt;retrieveByPK()&lt;/code&gt; or &lt;code&gt;doSelect*()&lt;/code&gt; (it&#039;s not an &lt;a href=&quot;http://martinfowler.com/eaaCatalog/identityMap.html&quot;&gt;Identity Map&lt;/a&gt; because the database request is still needed).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Date Handling&lt;/strong&gt;: The support has been improved by using the PHP 5.2 built-in &lt;a href=&quot;http://www.php.net/DateTime&quot;&gt;&lt;code&gt;DateTime&lt;/code&gt;&lt;/a&gt; class, which also means that Propel 1.3 supports pre/post Epoch dates natively.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Default Values&lt;/strong&gt;: You can now use expressions (like &lt;code&gt;CURRENT_TIMESTAMP&lt;/code&gt;) for default values in your database schema.&lt;/li&gt;
&lt;li&gt;and also native support for &lt;strong&gt;&lt;a href=&quot;http://propel.phpdb.org/trac/wiki/Users/Documentation/1.3/Relationships#One-to-OneRelationships&quot;&gt;One-to-One Relationships&lt;/a&gt;&lt;/strong&gt;, &lt;strong&gt;&lt;a href=&quot;http://propel.phpdb.org/trac/wiki/Users/Documentation/1.3/Replication&quot;&gt;Master-Slave connections&lt;/a&gt;&lt;/strong&gt;, &lt;strong&gt;Identifier Quoting&lt;/strong&gt;, &lt;strong&gt;&lt;a href=&quot;http://propel.phpdb.org/trac/wiki/Users/Documentation/1.3/Tree/NestedSet&quot;&gt;Nested Sets&lt;/a&gt;&lt;/strong&gt;, and &lt;a href=&quot;http://propel.phpdb.org/trac/query?status=closed&amp;amp;milestone=1.3&amp;amp;resolution=fixed&amp;amp;order=priority&quot;&gt;much more&lt;/a&gt;...&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;Propel 1.3 and symfony 1.2&lt;/h2&gt;

&lt;p&gt;This is also a great news for symfony as Propel 1.3 will be the default version of Propel bundled with symfony 1.2. Dustin has already &lt;a href=&quot;http://trac.symfony-project.org/changeset/10975&quot;&gt;upgraded symfony 1.2 to use Propel 1.3&lt;/a&gt;. If you can&#039;t switch to Propel 1.3 for whatever reason, you will still be able to use Propel 1.2 by installing the &lt;a href=&quot;http://trac.symfony-project.org/browser/plugins/sfPropelPlugin/branches/1.2&quot;&gt;sfPropelPlugin&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Dustin will update the &lt;a href=&quot;http://trac.symfony-project.org/browser/branches/1.2/UPGRADE_TO_1_2&quot;&gt;&lt;code&gt;UPGRADE_TO_1_2&lt;/code&gt;&lt;/a&gt; file in the coming days to highlight the changes you need to do to upgrade to Propel 1.3, but you can start today by reading the excellent &lt;a href=&quot;http://propel.phpdb.org/trac/wiki/Users/Documentation/1.3/Upgrading&quot;&gt;upgrade page on the Propel wiki&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;As symfony 1.2 is now in active development, the 1.2 branch may be a bit unstable over the next few weeks.&lt;/p&gt;

&lt;h2&gt;Doctrine 1.0 and symfony 1.2&lt;/h2&gt;

&lt;p&gt;As &lt;a href=&quot;http://www.symfony-project.org/blog/2008/07/01/symfony-1-2-roadmap&quot;&gt;announced&lt;/a&gt; in the &lt;a href=&quot;http://trac.symfony-project.org/milestone/1.2.0&quot;&gt;symfony 1.2 roadmap&lt;/a&gt;, Doctrine 1.0 will be officially supported and the sfDoctrinePlugin will be bundled with symfony 1.2. Doctrine &lt;a href=&quot;http://www.phpdoctrine.org/blog/doctrine-1-0-beta1-released&quot;&gt;1.0 beta1&lt;/a&gt; has been released two weeks ago and the Doctrine team will release Doctrine 1.0 final on September 1st.&lt;/p&gt;

&lt;p&gt;I have another great news for the Doctrine community and the symfony community. Jonathan Wage, the lead developer of Doctrine, will start &lt;a href=&quot;http://www.phpdoctrine.org/blog/doctrine-gets-its-first-employee&quot;&gt;working full-time&lt;/a&gt; for &lt;a href=&quot;http://www.sensiolabs.com/blog/post/2008/07/24/Sensio-Labs-supporte-le-projet-Doctrine-et-ouvre-un-bureau-aux-Etats-Unis&quot;&gt;Sensio Labs&lt;/a&gt; on September 1st. He will spend most of his time working on Doctrine and helping us with the official integration of Doctrine with sfDoctrinePlugin.&lt;/p&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/symfony/blog/~4/370739487&quot; height=&quot;1&quot; width=&quot;1&quot;/&gt;</description>
            
            <pubDate>Thu, 28 Aug 2008 18:01:35 -0700</pubDate>
        </item>
            
        <item>
            <title>A week of symfony #86 (18-&gt;24 august 2008)</title>
            <link>http://swik.net/symfony/symfony+project+weblog/A+week+of+symfony+%2386+%2818-%3E24+august+2008%29/cczqz</link>
            <description>&lt;p&gt;Symfony 1.2 is due to release in few weeks and therefore its development is accelerating. This week, Propel 1.3 was added as the default Propel version and the web debug toolbar was refactorized. In addition, development of symfony framework achieved 11000th changeset milestone.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Development mailing list&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Discussions about &lt;a href=&quot;http://groups.google.com/group/symfony-devs/browse_thread/thread/818222586ca89649&quot;&gt;symfony logs&lt;/a&gt;, &lt;a href=&quot;http://groups.google.com/group/symfony-devs/browse_thread/thread/4c81264521f8bc60&quot;&gt;required fields and sfForm&lt;/a&gt; and &lt;a href=&quot;http://groups.google.com/group/symfony-devs/browse_thread/thread/beb0673ee110189e&quot;&gt;rewritten sfPropelPlugin 1.3 behaviors&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Development highlights&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://trac.symfony-project.org/changeset/10947&quot;&gt;r10947&lt;/a&gt;: [1.0, 1.1, 1.2] fixed sfDomCssSelector attribute regex&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://trac.symfony-project.org/changeset/10948&quot;&gt;r10948&lt;/a&gt;: [1.0, 1.1, 1.2] fixed 0000-00-00 dates in mysqli creole driver&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://trac.symfony-project.org/changeset/10950&quot;&gt;r10950&lt;/a&gt;: [1.0, 1.1, 1.2] fixed sfBrowser parseArgumentAsArray function discards array indices == 0&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://trac.symfony-project.org/changeset/10952&quot;&gt;r10952&lt;/a&gt;: [1.1, 1.2] fixed STDOUT only exists with php-cli&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://trac.symfony-project.org/changeset/10964&quot;&gt;r10964&lt;/a&gt;: [1.0, 1.1, 1.2] fixed sfFileLogger file closing&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://trac.symfony-project.org/changeset/10970&quot;&gt;r10970&lt;/a&gt;: [1.1, 1.2] fixed default value returned by sfNoCache::get() method&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://trac.symfony-project.org/changeset/10971&quot;&gt;r10971&lt;/a&gt;: [1.2] tweaked routing log messages&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://trac.symfony-project.org/changeset/10972&quot;&gt;r10972&lt;/a&gt;: [1.2] fixed URL with hyphen is not camelised when converted to action name&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://trac.symfony-project.org/changeset/10974&quot;&gt;r10974&lt;/a&gt;: [1.2] tweaked some log messages&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;http://trac.symfony-project.org/changeset/10975&quot;&gt;r10975&lt;/a&gt;: [1.2] upgraded sfPropelPlugin to Propel 1.3&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://trac.symfony-project.org/changeset/10976&quot;&gt;r10976&lt;/a&gt;: [1.2] updated skeleton files for pdo dsn syntax&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://trac.symfony-project.org/changeset/10977&quot;&gt;r10977&lt;/a&gt;: [1.2] updated ObjectHelper to be compatable with Propel 1.3&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://trac.symfony-project.org/changeset/10978&quot;&gt;r10978&lt;/a&gt;: [1.2] updated propel.ini to use 1.1 date/time syntax&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://trac.symfony-project.org/changeset/10982&quot;&gt;r10982&lt;/a&gt;: [1.2] added sfFormField::getName()&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://trac.symfony-project.org/changeset/10985&quot;&gt;r10985&lt;/a&gt;, &lt;a href=&quot;http://trac.symfony-project.org/changeset/10986&quot;&gt;r10986&lt;/a&gt;: [1.1, 1.2] fixed sfWidget::setXhtml(false)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://trac.symfony-project.org/changeset/10993&quot;&gt;r10993&lt;/a&gt;: [1.2] tweaked test bootstrap cleanup&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://trac.symfony-project.org/changeset/11003&quot;&gt;r11003&lt;/a&gt;: [1.1, 1.2] fixed sfValidatorSchemaFilter not throwing an error bound to the filtered field&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://trac.symfony-project.org/changeset/11005&quot;&gt;r11005&lt;/a&gt;: [1.2] implemented task for configuring core plugins&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://trac.symfony-project.org/changeset/11007&quot;&gt;r11007&lt;/a&gt;: [1.2] renamed sourceDirectory to plugin_dir so that it is aligned with the original plugin_dir&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://trac.symfony-project.org/changeset/11019&quot;&gt;r11019&lt;/a&gt;: [1.2] added the possibility for sfBrowser to click on a link or button when several links or buttons exist with the same name&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://trac.symfony-project.org/changeset/11020&quot;&gt;r11020&lt;/a&gt;, &lt;a href=&quot;http://trac.symfony-project.org/changeset/11021&quot;&gt;r11021&lt;/a&gt;: [1.0, 1.1, 1.2] fixed sfBrowser doesn&#039;t send checked checkedboxes without value attributes correctly&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://trac.symfony-project.org/changeset/11034&quot;&gt;r11034&lt;/a&gt;: [1.2] changed exception title to be more explicit + added rounded corner under all browsers that support the feature&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://trac.symfony-project.org/changeset/11036&quot;&gt;r11036&lt;/a&gt;: [1.2] added a new sfVarLogger class&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://trac.symfony-project.org/changeset/11038&quot;&gt;r11038&lt;/a&gt;: [1.2] simplified sfWebDebug by adding the logger as an argument to the constructor&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://trac.symfony-project.org/changeset/11041&quot;&gt;r11041&lt;/a&gt;: [1.2] refactored the web debug toolbar to ease its customization&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://trac.symfony-project.org/changeset/11044&quot;&gt;r11044&lt;/a&gt;: [1.2] moved cache debug decoration to the sfViewCacheManager class&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://trac.symfony-project.org/changeset/11045&quot;&gt;r11045&lt;/a&gt;: [1.2] refactored the web debug toolbar (WIP)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://trac.symfony-project.org/changeset/11059&quot;&gt;r11059&lt;/a&gt;: [1.2] added sfWebResponse::getCharset() method&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://trac.symfony-project.org/changeset/11075&quot;&gt;r11075&lt;/a&gt;: [1.2] removed sf_timer_start constant to compute total time in the web debug toolbar&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://trac.symfony-project.org/changeset/11076&quot;&gt;r11076&lt;/a&gt;: [1.2] added a new debug.web.filter_logs event to allow the filtering of logs to be displayed in the web debug toolbar&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://trac.symfony-project.org/changeset/11083&quot;&gt;r11083&lt;/a&gt;: [1.2] modified sfWebDebugPanelTimer to listen to the debug.web.load_panels event to remove timers from the logs panel&lt;/li&gt;
&lt;li&gt;Updated &lt;a href=&quot;http://trac.symfony-project.com/trac/browser/branches/dwhittle&quot;&gt;dwhittle&lt;/a&gt; branch&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://trac.symfony-project.com/trac/timeline?from=08%2F24%2F2008&amp;daysback=6&amp;milestone=on&amp;ticket=on&amp;changeset=on&amp;update=Update&quot;&gt;...and many other changes&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Development digest&lt;/strong&gt;: 169 changesets, 25 defects created, 16 defects closed, 7 enhancements created, 3 enhancements closed, 2 documentation defects created, 5 documentation defects closed and 28 documentation edits.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Book and documentation&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Created &lt;a href=&quot;http://trac.symfony-project.org/wiki/HowtoAddCustomFilterCriteria&quot;&gt;How to Add Custom Filter Criteria to the Admin Generator&lt;/a&gt; page&lt;/li&gt;
&lt;li&gt;Updated &lt;a href=&quot;http://trac.symfony-project.org/wiki/Symfony12AdminGenerator&quot;&gt;symfony 1.2 admin generator&lt;/a&gt; page&lt;/li&gt;
&lt;li&gt;Added &lt;a href=&quot;http://www.symfony-project.org/book/forms/1_1/en/08-Internationalisation-and-Localisation&quot;&gt;chapter 8&lt;/a&gt; to the forms book&lt;/li&gt;
&lt;li&gt;Updated &lt;a href=&quot;http://trac.symfony-project.org/wiki/Symfony11Documentation/myFirstProject&quot;&gt;My First Project tutorial&lt;/a&gt; for symfony 1.1&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Wiki&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;New &lt;a href=&quot;http://trac.symfony-project.com/trac/wiki/JobPostings&quot;&gt;Job Postings&lt;/a&gt;:
  &lt;ul&gt;
    &lt;li&gt;Symfony + PHP/XHTML Developer @ &lt;a href=&quot;http://www.amplify.com.au&quot;&gt;Amplify&lt;/a&gt; - &lt;a href=&quot;http://www.amplify.com.au/about/work-for-amplify/&quot;&gt;Job specification&lt;/a&gt;  - Contact: jobs [at] amplify [dot] com [dot] au&lt;/li&gt;
  &lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;New &lt;a href=&quot;http://trac.symfony-project.com/trac/wiki/SymfonyBloggers&quot;&gt;symfony blogger&lt;/a&gt;:
  &lt;ul&gt;
    &lt;li&gt;Franziskus Domig (&lt;a href=&quot;http://seric.at/blog/tag/symfony/&quot;&gt;website&lt;/a&gt;, &lt;a href=&quot;http://seric.at/blog/tag/symfony/feed/&quot;&gt;feed&lt;/a&gt;)&lt;/li&gt;
  &lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Plugins&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;New plugins&lt;/strong&gt;
  &lt;ul&gt;
    &lt;li&gt;&lt;a href=&quot;http://www.symfony-project.org/plugins/sfExtendedFileValidatorPlugin&quot;&gt;sfExtendedFileValidatorPlugin&lt;/a&gt;: extends sfFileValidator to add verification of the height and width of an image sent by a form.&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;http://www.symfony-project.org/plugins/sfAmfPlugin&quot;&gt;sfAmfPlugin&lt;/a&gt;: allows you to handle AMF requests from Flex frontends&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;http://www.symfony-project.org/plugins/sfW3studioCmsPlugin&quot;&gt;sfW3studioCmsPlugin&lt;/a&gt;: ajax CMS based on symfony&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;http://www.symfony-project.org/plugins/sfSyntaxHighlighterPlugin&quot;&gt;sfSyntaxHighlighterPlugin&lt;/a&gt;: adds automatically the JavaScript code needed to use the SyntaxHighlighter Javascript library&lt;/li&gt;
    &lt;li&gt;Upcoming plugins: &lt;a href=&quot;http://www.symfony-project.org/plugins/sfMooToolsPlugin&quot;&gt;sfMooToolsPlugin&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Updated plugins&lt;/strong&gt;
  &lt;ul&gt;
    &lt;li&gt;&lt;a href=&quot;http://www.symfony-project.org/plugins/sfPropelAuditPlugin&quot;&gt;sfPropelAuditPlugin&lt;/a&gt;: changes to make plugin compatible with Symfony 1.1&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;http://www.symfony-project.org/plugins/sfDtAjaxPlugin&quot;&gt;sfDtAjaxPlugin&lt;/a&gt;: added option auto_submit and after_update_element, clear value element when element is cleared, added value_element_value option, added support for onsubmit event when auto_submit option is on&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;http://www.symfony-project.org/plugins/sfSearchPlugin&quot;&gt;sfSearchPlugin&lt;/a&gt;: repository re-organization to consolidate all search plugins, updated READMEs, [lucene] fixed xfLuceneEngine-&gt;empty() method, [lucene] added missing file to test suite, [propel] added hacking notice for Propel 1.3, added check for xfIndex in -&gt;checkIndexExists() task method&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;http://www.symfony-project.org/plugins/sfLucenePlugin&quot;&gt;sfLucenePlugin&lt;/a&gt;: repository re-organization to consolidate all search plugins, updating package.xml for sfLucene 0.1.7-beta&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;http://www.symfony-project.org/plugins/sfExtjsThemePlugin&quot;&gt;sfExtjsThemePlugin&lt;/a&gt;: notecolumn changes, added support for local combos in the filter&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;http://www.symfony-project.org/plugins/ysfDimensionsPlugin&quot;&gt;ysfDimensionsPlugin&lt;/a&gt;: added example for subscribing to user.change_culture event&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;http://trac.symfony-project.org/browser/plugins/sfDoctrineGuardPlugin&quot;&gt;sfDoctrineGuardPlugin&lt;/a&gt;: fixed wrong column in PluginsfGuardUserTable, fixed misplaced parameter to call call_user_func_array, fixed invalid XHTML code of signin form, removing remaining incorrect foreignType definitions&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;http://www.symfony-project.org/plugins/sfSwiftPlugin&quot;&gt;sfSwiftPlugin&lt;/a&gt;: updated README file &lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;http://www.symfony-project.org/plugins/sfJobQueuePlugin&quot;&gt;sfJobQueuePlugin&lt;/a&gt;: added sfqueue-first-eligible-job task, no sf logging for sfJobQueue tasks&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;http://www.symfony-project.org/plugins/ysfYUIPlugin&quot;&gt;ysfYUIPlugin&lt;/a&gt;: updated docs, small change to value checking in checkbox widget&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;http://www.symfony-project.org/plugins/ckWebServicePlugin&quot;&gt;ckWebServicePlugin&lt;/a&gt;: updated README to reflect last changes, updated package.xml for new releases, released 1.5.0 and 2.1.0 versions&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;http://www.symfony-project.org/plugins/sfPropelPlugin&quot;&gt;sfPropelPlugin&lt;/a&gt;: changed svn:externals to use propel 1.3.0 tag, added 1.2 branch (was sfPropelPlugin from symfony 1.1 branch), rewrote behaviors system to utilize sfEventDispatcher maintaining BC with sfMixer-style behaviors, removed sfMixer, connect phing build events to sfEventDispatcher&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;http://www.symfony-project.org/plugins/sfMogileFSPlugin&quot;&gt;sfMogileFSPlugin&lt;/a&gt;: released 1.0 version&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;http://www.symfony-project.org/plugins/sfFeed2Plugin&quot;&gt;sfFeed2Plugin&lt;/a&gt;: fixed typo, fixed encoding inside CDATA sections&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;http://www.symfony-project.org/plugins/sfWebBrowserPlugin&quot;&gt;sfWebBrowserPlugin&lt;/a&gt;: added PUT file support to sfSocketsAdapter&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;http://www.symfony-project.org/plugins/sfPropelPollsPlugin&quot;&gt;sfPropelPollsPlugin&lt;/a&gt;: added CHANGELOG, fixed package.xml, renamed LICENCE file to LICENSE, added changelog to package.xml file to comply to strict mode &lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;http://trac.symfony-project.org/wiki/DbFinderPlugin&quot;&gt;DbFinderPlugin&lt;/a&gt;: implemented sfDoctrineFinder::join(), implemented sfDoctrineFinder::with()&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;http://trac.symfony-project.org/browser/plugins/sfHighlightPlugin&quot;&gt;sfHighlightPlugin&lt;/a&gt;: removed test dependency on sfSearch&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;http://www.symfony-project.org/plugins/sfFormExtraPlugin&quot;&gt;sfFormExtraPlugin&lt;/a&gt;: added sfValidatorSchemaTimeInterval, a validator to validate the interval between two given dates, and according unit tests&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;http://www.symfony-project.org/plugins/sfMinifyPlugin&quot;&gt;sfMinifyPlugin&lt;/a&gt;: modified svn structure, updates for symfony 1.1, updated README&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;http://www.symfony-project.org/plugins/sfThumbnailPlugin&quot;&gt;sfThumbnailPlugin&lt;/a&gt;: added a new method to sfImagemagickAdapter for dealing with custom crop proportions, released 1.5.3 version&lt;/li&gt;
  &lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;They talked about us&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://arpeggios.wordpress.com/2008/08/18/creating-a-mail-logger-with-swift/&quot;&gt;Creating a mail logger with Swift&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://derentwickler.de/itr/news/psecom,id,43341,nodeid,55.html&quot;&gt;WordPress in Symfony integrieren&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://arpeggios.wordpress.com/2008/08/19/arpeggio-2-plugin-functional-testing/&quot;&gt;Plugins functional testing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://redotheweb.com/2008/08/19/tip-clean-up-your-symfony-debug-logs/&quot;&gt;Tip: Clean up your symfony debug logs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://n8v.enteuxis.org/2008/08/upgrading-sfguardplugin-for-symfony-11/&quot;&gt;Upgrading sfGuardPlugin for symfony 1.1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://redotheweb.com/2008/08/20/propel-13-is-out/&quot;&gt;Propel 1.3 is out&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://arpeggios.wordpress.com/2008/08/20/extending-default-module-actions/&quot;&gt;Extending the default module action&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.symfony-zone.com/wordpress/2008/08/20/flex-and-symfony/&quot;&gt;Flex and Symfony&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://arpeggios.wordpress.com/2008/08/20/creating-an-ajax-update-only-form-using-the-default-validators/&quot;&gt;Creating an Ajax update-only form using the default validators&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://blog.fxposter.org/2008/08/20/propel-13/&quot;&gt;Propel 1.3&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.symfony.es/2008/08/21/propel-y-doctrine-en-symfony-12/&quot;&gt;Propel y Doctrine en Symfony 1.2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.phpindex.com/index.php/2008/08/22/4800-propel-13-symfony-12&quot;&gt;Propel 1.3 &amp; Symfony 1.2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.symfony-zone.com/wordpress/2008/08/22/using-sfamfplugin-part-1/&quot;&gt;Using sfAmfPlugin part 1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://blog.mirthlab.com/2008/08/21/using-symfony-partials-in-dhtml-and-ajax/&quot;&gt;Using Symfony Partials In DHTML and Ajax&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://tigor.com.ua/blog/2008/08/24/symfony-sfpropelpageri18n-propel-pager-with-i18n/&quot;&gt;sfPropelPagerI18n: расширяем sfPropelPager для поддержки i18n&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://phpimpact.wordpress.com/2008/08/23/propel-13-uses-pdo-instead-of-creole/&quot;&gt;Propel 1.3 uses PDO instead of Creole&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://blog.quall.net/program/214&quot;&gt;symfony1.1.1をwindowsのxamppにインストールする&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://itsjawad.wordpress.com/2008/08/22/flash-percent-uploader-with-symfony/&quot;&gt;Flash Percent Uploader with Symfony!&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://tigor.com.ua/blog/2008/08/22/review-propel-behaviors-by-sfpropelactastaggablebehaviorplugin/&quot;&gt;Обзор Propel Behaviors в Symfony на примере плагина sfPropelActAsTaggableBehaviorPlugin&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://patrickespake.wordpress.com/2008/08/22/validacao-de-datas-no-symfony-com-sfdatevalidator/&quot;&gt;Validação de datas no symfony com sfDateValidator&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://vondich.wordpress.com/2008/08/22/symfony-im-lovin-it/&quot;&gt;symfony: I’m lovin’ it&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://michaelkimsal.com/blog/symfony-__tostring-generation/&quot;&gt;Symfony __toString() generation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.smackblast.com/2008/08/60-days-with-symfony/&quot;&gt;60 days with symfony&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.developercast.com/2008/08/21/symfony-blog-propel-13-doctrine-10-and-symfony-12/&quot;&gt;Symfony Blog: Propel 1.3, Doctrine 1.0, and symfony 1.2&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/symfony/blog/~4/373714226&quot; height=&quot;1&quot; width=&quot;1&quot;/&gt;</description>
            
            <pubDate>Thu, 28 Aug 2008 18:01:35 -0700</pubDate>
        </item>
            
        <item>
            <title>symfony Events</title>
            <link>http://swik.net/symfony/symfony+project+weblog/symfony+Events/cczqy</link>
            <description>&lt;p&gt;The end of the year will be very interesting for the symfony project with a lot of opportunities to meet the community and to learn symfony.&lt;/p&gt;

&lt;h2&gt;Conferences&lt;/h2&gt;

&lt;p&gt;I try to attend as much PHP conferences as I can to spread the word about symfony. If you want to meet me and share your experience with symfony, please come to one of the conferences I will speak at in the coming weeks:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;23 September (France / Paris - French):     &lt;a href=&quot;http://www.sensiolabs.com/en/event/4&quot;&gt;Présentation symfony&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;24-25 September (France / Paris - French):  &lt;a href=&quot;http://www.paris-libre.org/&quot;&gt;Paris Capitale du Libre&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;09 Octobre (France / Montpellier - French): &lt;a href=&quot;http://s.ymfony.com/&quot;&gt;symfony presentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;27-31 October (Germany / Mainz - English):  &lt;a href=&quot;http://it-republik.de/php/phpconference/&quot;&gt;International PHP Conference&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;08-09 December (France / Paris - French):   &lt;a href=&quot;http://afup.org/pages/forumphp2008/&quot;&gt;Forum PHP&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;Trainings&lt;/h2&gt;

&lt;p&gt;&lt;a href=&quot;http://www.sensiolabs.com/&quot;&gt;Sensio Labs&lt;/a&gt; has been successfully delivering symfony trainings since June 2007 and during that time, we trained more than 300 people all over the world (France, Germany, Italy, USA, Canada, India, Ukraine, Romania, England, Netherlands, ...).&lt;/p&gt;

&lt;p&gt;The symfony workshops have proven to be very popular. Today, I am pretty excited to announce two major steps for our workshops.
Firstly, the new symfony 1.1 workshops are now available in French and English.
Secondly, thanks to the new Sensio Labs offices in the US and in Canada, you can be trained by Sensio Labs in these two countries as well:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;symfony 1.0 trainings by Sensio Labs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.sensiolabs.com/en/training/detail/PARIS-SEPTEMBER-2008&quot;&gt;17-19 September&lt;/a&gt; (France / Paris) in French&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.sensiolabs.com/en/training/detail/PARIS-ENGLISH-SEPTEMBER-2008&quot;&gt;24-26 September&lt;/a&gt; (France / Paris) in English&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;symfony 1.1 trainings by Sensio Labs. Join us for the first symfony 1.1 trainings:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.sensiolabs.com/en/training/detail/PARIS-OCTOBER-2008&quot;&gt;22-24 October&lt;/a&gt; (France / Paris) in French&lt;/li&gt;
&lt;li&gt;29-31 October (Canada / Montreal) in English&lt;/li&gt;
&lt;li&gt;29-31 October (USA / Atlanta) in English&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.sensiolabs.com/en/training/detail/PARIS-NOVEMBER-2008&quot;&gt;19-21 November&lt;/a&gt; (France / Paris) in French&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The registration for the workshops in the US and Canada are not opened yet, but if you want to be notified when the registration opens, send me an email to fabien.potencier at sensio.com.&lt;/p&gt;

&lt;p&gt;You will find even &lt;a href=&quot;http://www.sensiolabs.com/en/offer/formation-symfony&quot;&gt;more training dates&lt;/a&gt; on the Sensio Labs website. And if you want to organize your very own workshop for your company, please &lt;a href=&quot;http://www.sensiolabs.com/en/contact&quot;&gt;contact us&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;The Camp&lt;/h2&gt;

&lt;p&gt;I have already talked about &lt;a href=&quot;http://www.symfonycamp.com/&quot;&gt;symfony Camp&lt;/a&gt; in this blog but the event is approaching very fast. The registrations are growing day by day, and Lambert, from &lt;a href=&quot;http://www.dop.nu/&quot;&gt;DOP&lt;/a&gt;, told me today that they have two places left for the &lt;a href=&quot;http://symfonycamp.com/cms/course&quot;&gt;symfony 1.1 training&lt;/a&gt; that will take place on September 11th, just before the camp.&lt;/p&gt;

&lt;p&gt;The other two days are packed with great sessions from great speakers! Don&#039;t miss this unique opportunity to &lt;a href=&quot;http://symfonycamp.com/registration/create&quot;&gt;meet the community&lt;/a&gt;.&lt;/p&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/symfony/blog/~4/374446501&quot; height=&quot;1&quot; width=&quot;1&quot;/&gt;</description>
            
            <pubDate>Thu, 28 Aug 2008 18:01:35 -0700</pubDate>
        </item>
            
        <item>
            <title>Which version of symfony for your next project?</title>
            <link>http://swik.net/symfony/symfony+project+weblog/Which+version+of+symfony+for+your+next+project%3F/cczqx</link>
            <description>&lt;p&gt;With three major symfony versions, newcomers have sometimes a hard time figuring out which version to use for their next project.&lt;/p&gt;

&lt;p&gt;To help them choose the right version, I have just updated the symfony project website with a brand new &lt;a href=&quot;http://www.symfony-project.org/installation&quot;&gt;installation page&lt;/a&gt;. I also hope IT managers will love the great matrix I have made for them:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://www.symfony-project.org/uploads/assets/choice_matrix.png&quot; alt=&quot;symfony choice matrix&quot;/&gt;&lt;/p&gt;

&lt;p&gt;The upgrade instructions have also been put online with links available from the main installation page and from each symfony version installation page:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Instructions to &lt;a href=&quot;http://www.symfony-project.org/installation/1_1/upgrade&quot;&gt;upgrade to symfony 1.1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Instructions to &lt;a href=&quot;http://www.symfony-project.org/installation/1_2/upgrade&quot;&gt;upgrade to symfony 1.2&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you are curious and want to know what has already changed in the upcoming symfony 1.2 version, you can read the &lt;a href=&quot;http://www.symfony-project.org/installation/1_2/upgrade&quot;&gt;upgrade page for symfony 1.2&lt;/a&gt;. This page is updated in real time whenever a new feature is added to this version.&lt;/p&gt;&lt;img src=&quot;http://feeds.feedburner.com/~r/symfony/blog/~4/374956102&quot; height=&quot;1&quot; width=&quot;1&quot;/&gt;</description>
            
            <pubDate>Thu, 28 Aug 2008 18:01:35 -0700</pubDate>
        </item>
            
        <item>
            <title>New in symfony 1.2: Customize the Web Debug Toolbar</title>
            <link>http://swik.net/symfony/symfony+project+weblog/New+in+symfony+1.2%3A+Customize+the+Web+Debug+Toolbar/cczqw</link>
            <description>&lt;p&gt;The symfony web debug toolbar is one of the developer best friend. It is always conveniently accessible in the browser when using the development environment. It gives you everything you need to know about the current page and ease the debugging of your applications. Until now, all the information available in this toolbar were hardcoded. But as of symfony 1.2, the web debug toolbar is entirely configurable.&lt;/p&gt;

&lt;h2&gt;The web debug toolbar&lt;/h2&gt;

&lt;p&gt;Without any configuration, the default toolbar looks like this:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://www.symfony-project.org/uploads/assets/web_debug_toolbar/default.png&quot; alt=&quot;The default web debug toolbar&quot;/&gt;&lt;/p&gt;

&lt;p&gt;The toolbar is composed of panels. Each panel is composed of a title and an optional panel content, and the panel is represented by a PHP object. By default, there are seven panels:&lt;/p&gt;

&lt;table&gt;

&lt;tr&gt;
  &lt;em&gt;Name&lt;/em&gt;
  &lt;em&gt;Class name&lt;/em&gt;
  &lt;em&gt;Representation&lt;/em&gt;
&lt;/tr&gt;

&lt;tbody&gt;
&lt;tr&gt;
  &lt;td&gt;symfony version&lt;/td&gt;
  &lt;td&gt;&lt;code&gt;sfWebDebugPanelSymfonyVersion&lt;/code&gt;&lt;/td&gt;
  &lt;td&gt;&lt;img src=&quot;http://www.symfony-project.org/uploads/assets/web_debug_toolbar/symfony_version.png&quot; alt=&quot;symfony version&quot;/&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;cache information&lt;/td&gt;
  &lt;td&gt;&lt;code&gt;sfWebDebugPanelCache&lt;/code&gt;&lt;/td&gt;
  &lt;td&gt;&lt;img src=&quot;http://www.symfony-project.org/uploads/assets/web_debug_toolbar/cache.png&quot; alt=&quot;cache&quot;/&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;configuration&lt;/td&gt;
  &lt;td&gt;&lt;code&gt;sfWebDebugPanelConfig&lt;/code&gt;&lt;/td&gt;
  &lt;td&gt;&lt;img src=&quot;http://www.symfony-project.org/uploads/assets/web_debug_toolbar/configuration.png&quot; alt=&quot;configuration&quot;/&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;logs&lt;/td&gt;
  &lt;td&gt;&lt;code&gt;sfWebDebugPanelLogs&lt;/code&gt;&lt;/td&gt;
  &lt;td&gt;&lt;img src=&quot;http://www.symfony-project.org/uploads/assets/web_debug_toolbar/logs.png&quot; alt=&quot;logs&quot;/&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;database information&lt;/td&gt;
  &lt;td&gt;&lt;code&gt;sfWebDebugPanelDatabase&lt;/code&gt;&lt;/td&gt;
  &lt;td&gt;&lt;img src=&quot;http://www.symfony-project.org/uploads/assets/web_debug_toolbar/database.png&quot; alt=&quot;database&quot;/&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;memory usage&lt;/td&gt;
  &lt;td&gt;&lt;code&gt;sfWebDebugPanelMemory&lt;/code&gt;&lt;/td&gt;
  &lt;td&gt;&lt;img src=&quot;http://www.symfony-project.org/uploads/assets/web_debug_toolbar/memory.png&quot; alt=&quot;memory&quot;/&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
  &lt;td&gt;timer&lt;/td&gt;
  &lt;td&gt;&lt;code&gt;sfWebDebugPanelTimer&lt;/code&gt;&lt;/td&gt;
  &lt;td&gt;&lt;img src=&quot;http://www.symfony-project.org/uploads/assets/web_debug_toolbar/timer.png&quot; alt=&quot;timer&quot;/&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

&lt;h2&gt;Customizing the toolbar&lt;/h2&gt;

&lt;p&gt;You can customize the web debug toolbar by listening to the &lt;code&gt;debug.web.load_panels&lt;/code&gt; event in your application or project configuration file. The following code shows you how to listen to this event in the frontend configuration class:&lt;/p&gt;

&lt;pre class=&quot;php&quot;&gt;&lt;span class=&quot;kw2&quot;&gt;&amp;lt;?php&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;kw2&quot;&gt;class&lt;/span&gt; frontendConfiguration &lt;span class=&quot;kw2&quot;&gt;extends&lt;/span&gt; sfApplicationConfiguration
&lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
  &lt;span class=&quot;kw2&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; configure&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
  &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
    &lt;span class=&quot;co1&quot;&gt;// ...&lt;/span&gt;
&amp;nbsp;
    &lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;-&amp;gt;&lt;span class=&quot;me1&quot;&gt;dispatcher&lt;/span&gt;-&amp;gt;&lt;span class=&quot;me1&quot;&gt;connect&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&#039;debug.web.load_panels&#039;&lt;/span&gt;, &lt;span class=&quot;kw3&quot;&gt;array&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;, &lt;span class=&quot;st0&quot;&gt;&#039;configureWebDebugToolbar&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;;
  &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;&lt;/pre&gt;

&lt;p&gt;With this configuration in place, symfony will automatically calls the &lt;code&gt;configureWebDebugToolbar()&lt;/code&gt; method when it initializes the web debug toolbar. This method can then remove, replace, or add panels.&lt;/p&gt;

&lt;p&gt;As for every listener, symfony calls the &lt;code&gt;configureWebDebugToolbar()&lt;/code&gt; method with an event as an argument. The subject of the event is the web debug toolbar object we want to manipulate:&lt;/p&gt;

&lt;pre class=&quot;php&quot;&gt;&lt;span class=&quot;kw2&quot;&gt;&amp;lt;?php&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;kw2&quot;&gt;class&lt;/span&gt; frontendConfiguration &lt;span class=&quot;kw2&quot;&gt;extends&lt;/span&gt; sfApplicationConfiguration
&lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
  &lt;span class=&quot;kw2&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; configure&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
  &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
    &lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;-&amp;gt;&lt;span class=&quot;me1&quot;&gt;dispatcher&lt;/span&gt;-&amp;gt;&lt;span class=&quot;me1&quot;&gt;connect&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&#039;debug.web.load_panels&#039;&lt;/span&gt;, &lt;span class=&quot;kw3&quot;&gt;array&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$this&lt;/span&gt;, &lt;span class=&quot;st0&quot;&gt;&#039;configureWebDebugToolbar&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;;
  &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
  &lt;span class=&quot;kw2&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; configureWebDebugToolbar&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;sfEvent &lt;span class=&quot;re0&quot;&gt;$event&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
  &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
    &lt;span class=&quot;re0&quot;&gt;$webDebugToolbar&lt;/span&gt; = &lt;span class=&quot;re0&quot;&gt;$event&lt;/span&gt;-&amp;gt;&lt;span class=&quot;me1&quot;&gt;getSubject&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;;
  &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;&lt;/pre&gt;

&lt;h2&gt;Removing a panel&lt;/h2&gt;

&lt;p&gt;To remove a panel, call the &lt;code&gt;removePanel()&lt;/code&gt; method with the name of the panel like this:&lt;/p&gt;

&lt;pre class=&quot;php&quot;&gt;&lt;span class=&quot;kw2&quot;&gt;&amp;lt;?php&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;kw2&quot;&gt;class&lt;/span&gt; frontendConfiguration &lt;span class=&quot;kw2&quot;&gt;extends&lt;/span&gt; sfApplicationConfiguration
&lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
  &lt;span class=&quot;co1&quot;&gt;// ...&lt;/span&gt;
&amp;nbsp;
  &lt;span class=&quot;kw2&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; configureWebDebugToolbar&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;sfEvent &lt;span class=&quot;re0&quot;&gt;$event&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
  &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
    &lt;span class=&quot;re0&quot;&gt;$webDebugToolbar&lt;/span&gt; = &lt;span class=&quot;re0&quot;&gt;$event&lt;/span&gt;-&amp;gt;&lt;span class=&quot;me1&quot;&gt;getSubject&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;;
&amp;nbsp;
    &lt;span class=&quot;re0&quot;&gt;$webDebugToolbar&lt;/span&gt;-&amp;gt;&lt;span class=&quot;me1&quot;&gt;removePanel&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&#039;memory&#039;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;;
  &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;&lt;/pre&gt;

&lt;h2&gt;Replacing or adding a panel&lt;/h2&gt;

&lt;p&gt;To replace a panel, call the &lt;code&gt;setPanel()&lt;/code&gt; method with an existing name.&lt;/p&gt;

&lt;p&gt;To create a panel, call the same &lt;code&gt;setPanel()&lt;/code&gt; method but give it a unique new name.&lt;/p&gt;

&lt;p&gt;You can of course extends an existing panel class to add or remove some information but for the sake of the example, let&#039;s create a brand new panel that displays the JavaScript and stylesheet files that are registered within our response object:&lt;/p&gt;

&lt;pre class=&quot;php&quot;&gt;&lt;span class=&quot;kw2&quot;&gt;&amp;lt;?php&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;kw2&quot;&gt;class&lt;/span&gt; frontendConfiguration &lt;span class=&quot;kw2&quot;&gt;extends&lt;/span&gt; sfApplicationConfiguration
&lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
  &lt;span class=&quot;co1&quot;&gt;// ...&lt;/span&gt;
&amp;nbsp;
  &lt;span class=&quot;kw2&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; configureWebDebugToolbar&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;sfEvent &lt;span class=&quot;re0&quot;&gt;$event&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
  &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
    &lt;span class=&quot;re0&quot;&gt;$webDebugToolbar&lt;/span&gt; = &lt;span class=&quot;re0&quot;&gt;$event&lt;/span&gt;-&amp;gt;&lt;span class=&quot;me1&quot;&gt;getSubject&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;;
&amp;nbsp;
    &lt;span class=&quot;re0&quot;&gt;$webDebugToolbar&lt;/span&gt;-&amp;gt;&lt;span class=&quot;me1&quot;&gt;setPanel&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&#039;assets&#039;&lt;/span&gt;, &lt;span class=&quot;kw2&quot;&gt;new&lt;/span&gt; sfWebDebugPanelAssets&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$webDebugToolbar&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;;
  &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;&lt;/pre&gt;

&lt;p&gt;We need to create the &lt;code&gt;sfWebDebugPanelAssets&lt;/code&gt; class. All panel classes must extend &lt;code&gt;sfWebDebugPanel&lt;/code&gt; and implement at least the following three abstract methods:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;getTitle()&lt;/code&gt;:        Returns the HTML displayed on the web debug toolbar. If it returns &lt;code&gt;null&lt;/code&gt;, the panel won&#039;t be displayed.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;getPanelContent()&lt;/code&gt;: Returns the HTML representation of the panel. If it returns &lt;code&gt;null&lt;/code&gt;, the title won&#039;t be clickable.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;getPanelTitle()&lt;/code&gt;:   Returns the title of the panel when it is displayed.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;With this information in mind, here is the simplest panel that can possibly work:&lt;/p&gt;

&lt;pre class=&quot;php&quot;&gt;&lt;span class=&quot;kw2&quot;&gt;&amp;lt;?php&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;kw2&quot;&gt;class&lt;/span&gt; sfWebDebugPanelAssets &lt;span class=&quot;kw2&quot;&gt;extends&lt;/span&gt; sfWebDebugPanel
&lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
  &lt;span class=&quot;kw2&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; getTitle&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
  &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
    &lt;span class=&quot;kw1&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&#039;assets&#039;&lt;/span&gt;;
  &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
  &lt;span class=&quot;kw2&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; getPanelTitle&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
  &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
    &lt;span class=&quot;kw1&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;st0&quot;&gt;&#039;Stylesheet and JavaScript files from sfWebResponse&#039;&lt;/span&gt;;
  &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;
  &lt;span class=&quot;kw2&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; getPanelContent&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
  &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
    &lt;span class=&quot;kw1&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;null&lt;/span&gt;;
  &lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&lt;span class=&quot;br0&quot;&gt;&amp;#125;&lt;/span&gt;
&amp;nbsp;&lt;/pre&gt;

&lt;p&gt;It will display a new &#039;assets&#039; entry in the web debug toolbar but the text is not clickable because the panel content is empty.&lt;/p&gt;

&lt;p&gt;Let&#039;s make it a bit more interesting by adding some content to the panel. The response object has two methods, &lt;code&gt;getJavascripts()&lt;/code&gt; and &lt;code&gt;getStylesheets()&lt;/code&gt;, and these methods return an array of JavaScript and stylesheets files included by the response object.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;getPanelContent()&lt;/code&gt; method iterates through these two arrays to construct the panel content and returns it as an HTML string:&lt;/p&gt;

&lt;pre class=&quot;php&quot;&gt;&lt;span class=&quot;kw2&quot;&gt;&amp;lt;?php&lt;/span&gt;
&amp;nbsp;
&lt;span class=&quot;kw2&quot;&gt;class&lt;/span&gt; sfWebDebugPanelAssets &lt;span class=&quot;kw2&quot;&gt;extends&lt;/span&gt; sfWebDebugPanel
&lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
  &lt;span class=&quot;co1&quot;&gt;// ...&lt;/span&gt;
&amp;nbsp;
  &lt;span class=&quot;kw2&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;kw2&quot;&gt;function&lt;/span&gt; getPanelContent&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
  &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
    &lt;span class=&quot;re0&quot;&gt;$response&lt;/span&gt; = sfContext::&lt;span class=&quot;me2&quot;&gt;getInstance&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;-&amp;gt;&lt;span class=&quot;me1&quot;&gt;getResponse&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;;
    &lt;span class=&quot;re0&quot;&gt;$html&lt;/span&gt; = &lt;span class=&quot;st0&quot;&gt;&#039;&#039;&lt;/span&gt;;
&amp;nbsp;
    &lt;span class=&quot;kw1&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$stylesheets&lt;/span&gt; = &lt;span class=&quot;re0&quot;&gt;$response&lt;/span&gt;-&amp;gt;&lt;span class=&quot;me1&quot;&gt;getStylesheets&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
    &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
      &lt;span class=&quot;re0&quot;&gt;$html&lt;/span&gt; .= &lt;span class=&quot;st0&quot;&gt;&#039;&amp;lt;h2&amp;gt;Stylesheets&amp;lt;/h2&amp;gt;&amp;lt;ul&amp;gt;&#039;&lt;/span&gt;;
      &lt;span class=&quot;kw1&quot;&gt;foreach&lt;/span&gt; &lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$stylesheets&lt;/span&gt; &lt;span class=&quot;kw1&quot;&gt;as&lt;/span&gt; &lt;span class=&quot;re0&quot;&gt;$file&lt;/span&gt; =&amp;gt; &lt;span class=&quot;re0&quot;&gt;$options&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#41;&lt;/span&gt;
      &lt;span class=&quot;br0&quot;&gt;&amp;#123;&lt;/span&gt;
        &lt;span class=&quot;re0&quot;&gt;$html&lt;/span&gt; .= &lt;span class=&quot;kw3&quot;&gt;sprintf&lt;/span&gt;&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;st0&quot;&gt;&#039;&amp;lt;li&amp;gt;&amp;lt;strong&amp;gt;%s&amp;lt;/strong&amp;gt; %s&amp;lt;/li&amp;gt;&#039;&lt;/span&gt;, stylesheet_path&lt;span class=&quot;br0&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span class=&quot;re0&quot;&gt;$file&lt;/span&gt;&