22 Jul 2008

feedzend framework

Zend Framework 1.6 Release Candidate 1 now available!

Fire up the download clients, Zend Framework 1.6 RC 1 is now available. There's nothing better than fresh code!



22 Jul 2008 6:09pm GMT

21 Jul 2008

feedCI News

CodeIgniter Community Voice - Lee’s Lost Bet

EllisLab is blessed with two of the greatest communities that can be found anywhere on the internet in ExpressionEngine and more recently CodeIgniter. Despite being a relative newcomer to the scene, the people attracted to CodeIgniter are among the smartest, most talented and down-to-earth developers around today. From time to time we want to highlight some of these talented people, and we've asked them to lend their voice to ours. Have your voice. I hope you enjoy what they have to say as much as I did.

This week, our Community Voice author is Lee Tengum, who discusses how CodeIgniter has cost him over $8,800 in beer and soft drinks. Lee is a bit of a serial entrepreneur, with 5 successful startups under his belt including the recently launched http://cleverandy.com. He has become something of a cookie! jar of startup knowledge. When he is not managing his team of contractors he blogs about the trials and tribulations of his startups at http://tumbledry.ca.


It all started with an idea at 4 a.m. on a Tuesday morning that brought us to CodeIgniter.
We were neck deep in a deadline and sinking fast. We knew we needed help.
After puling some strings that bought some time we quit work for a week - well, client work at least. There were our own issues to solve.

We had amassed a team of roughly 14 at this point and had no way to efficiently manage who was doing what for how much and how long; in fact we were often surprised by code submissions.
That's a sad place to be.

We had been building in the 'flavor of the weak' when it came to frameworks and often chose whatever the contractor was fluent in to save time (which != saved money).

Not only were we not communicating, but we were reinventing the wheel for every project. Have I mentioned how sad of a place that is to be?

Back to 4 a.m.

Doug is one of my closest friends, and a trusted peer. He suggested we should develop a contractor management system and that we should build it all on CodeIgniter. At this time I hadn't seen sleep in nearly a day, consumed almost seven liters of coffee, the "development tub" was empty and we were trying to finish a RoR project that a contractor bailed on. I didn't want to hear about another &^%in framework, I just wanted this to be done.

Thankfully my friend couldn't understand the word "no" and kept pressing. He went on about how anyone with knowledge of PHP can build with this, its development cycle and the community that was forming around it. I still wasn't convinced but he assured me this would be the last time we changed frameworks and proposed a friendly bet.

I hate that I love gambling. I don't have a problem, per say, but I always lose. The problem is that my pride drives me to bet anyways. Besides I relished the opportunity to prove him wrong.

So the bet was laid. We would build the contractor management system in CI and all client projects for one month with CI. At the end of that month if I wanted to go back to another framework and could justify it rationally with solid points then he would keep the Development Tub full for a full year (a cost of roughly $100/week). If we stayed with Code Igniter I would the one stocking the tub for the next year and I would also have accept his offer to buy into my company and become a partner.

On Wednesday morning we filled the tub (again not a problem… really) and set out to build our app. We outlined what we wanted, mapped it out on the whiteboard, set up a Basecamp project for it, defined our milestones and set Saturday as launch day.

The tub... The tub… again

Beer? Check.
Monster energy drinks? Check.
Coffee? Check.
M&M Peanuts? Check.
Babysitter? Check. (We're parents...)
Pizza? Maybe.
Basecamp set up? Check.
SVN Server? Check.

While I depleted the tub and read the user guide, Doug was getting down to business. By the time I'd figured out how I was going to tackle my portion of the build he'd built the user authentication as well as the management section. Doug was already adding features to our "Wish List" in Basecamp and checking off milestones. Roughly 9 hrs into our project we started completing items on the wish list, which had never happened before. The wish list had never become a checklist before a deadline and I was starting to worry.

In the wee hours of Thursday morning we headed home to sleep. The following day we sent login details to our contractors and set up a basecamp project to log bugs. We fixed the stupid little ones that we missed and made changes on the fly. By the end of the day I had a huge overview of our team of contractors and a vision of things to come. I never did see the 48 hr Milestone reminder emails from Basecamp… again I was seeing a change.

By the end of the month we had more than a few client sites built on CI. We also had a process for development laid out and the term Rapid Development was taking on meaning with me. I was happy, the clients were happy and we had a team we could manage… and then reality sunk in.

I hate losing, even more so I hate losing to people I like winning against. I lost the bet. Though I gained a valuable business partner, a managed team, profitability and a kick ass framework to build it upon… I am forever filling the tub.

And with ExpressionEngine 2 built on CI (Which we are using extensively for client sites now), the tub has gained a lifetime sponsor. Me.

That app was build on 1.4.0 on September 20th 2006 and since then we have revised many things including our checklist:

Beer? Check.
M&M Peanuts? Check.
Basecamp set up? Check.
SVN Server? Check.

See the difference? We don't live at the office any more. CodeIgniter gave us the freedom to build around our needs and wants and it gave us the structure we needed to become more efficient. Just don't bet against CI, it has cost me $8800 and counting.... weekly.

ABOUT LEE

Lee is a bit of a serial entrepreneur, with 5 successful startups under his belt including the recently launched http://cleverandy.com. He has become something of a cookie! jar of startup knowledge. When he is not managing his team of contractors he blogs about the trials and tribulations of his startups at http://tumbledry.ca.

Discuss this article

21 Jul 2008 8:33pm GMT

feedcakebaker

Defining and accessing helpers

If you add a helper to the $helpers array of your controller, then it doesn't matter whether the first character is lower- or uppercase: public $helpers = array('Navigation'); or public $helpers = array('navigation'); In both cases, you access the helper's methods in your view with: $navigation->someMethod(); If you use $Navigation instead of $navigation, then it causes a "call to a member [...]

21 Jul 2008 4:53pm GMT

20 Jul 2008

feedsymfony Project Blog

A week of symfony #81 (14->20 july 2008)

<p>The main activity of this week has been focused on plugins. Yahoo continues publishing some of the plugins used to build its websites. In addition, 25 plugins were updated during this week, mostly sfExtjsThemePlugin, dgDojoPlugin and sfFormtasticPlugin.</p> <p><strong>Development highlights</strong></p> <ul> <li><a href="http://trac.symfony-project.org/changeset/10289">r10289</a>, <a href="http://trac.symfony-project.org/changeset/10290">r10290</a>: [1.1, 1.2] added warning to sfWidgetFormSchema->setNameFormat() about illegal names that will confuse symfony</li> <li><a href="http://trac.symfony-project.org/changeset/10306">r10306</a>, <a href="http://trac.symfony-project.org/changeset/10307">r10307</a>: [1.1, 1.2] fixed handling boolean values in radio and checkbox widgets</li> <li><a href="http://trac.symfony-project.org/changeset/10328">r10328</a>: [1.0, 1.1, 1.2] fixed plugin model overriding</li> <li>Updated <a href="http://trac.symfony-project.com/trac/browser/branches/dwhittle">dwhittle</a> branch</li> <li><a href="http://trac.symfony-project.com/trac/timeline?from=07%2F20%2F2008&daysback=6&milestone=on&ticket=on&changeset=on&update=Update">...and many other changes</a></li> </ul> <p><strong>Development digest</strong>: 101 changesets, 39 defects created, 13 defects closed, 9 enhancements created, 3 enhancements closed, 9 documentation defects created, 7 documentation defects closed and 69 documentation edits.</p> <p><strong>Book and documentation</strong></p> <ul> <li>Created <a href="http://trac.symfony-project.org/wiki/HowToPatchSymfony1.1ToThePostgreSQLWorkingMultipleSchemas">How to patch Symfony1.1 to the PostgreSQL working multiple schemas</a> page</li> <li>Updated <a href="http://trac.symfony-project.org/wiki/HowToPatchTablesForI18nFromGeneratedSchema">How to patch tables for I18n from generated schema</a>, <a href="http://trac.symfony-project.org/wiki/SymfonyAndVim">coding symfony with Vim</a>, <a href="http://trac.symfony-project.org/wiki/lighttpd">Install Symfony framework over lighttpd</a> pages</li> <li>Added some portuguese translations of cookbook tutorials: <a href="http://www.symfony-project.org/cookbook/1_1/pt/doctrine">Trabalhando com Doctrine</a></li> </ul> <p><strong>Wiki</strong></p> <ul> <li>New <a href="http://trac.symfony-project.com/trac/wiki/JobPostings">Job Postings</a>: <ul> <li>Symfony Developer @ <a href="http://www.espresso-com.com">espresso-com.com</a> - 3 month contract based in Montreal, Quebec, Canada - Contact: emploi [at] espresso-com [dot] com</li> <li>Softwate Developer @ <a href="http://www.mangolanguages.com">MANGO LANGUAGES</a> - full time based in Detroit, MI USA - Contact: techrecruiting [at] mangolanguages [dot] com</li> </ul> </li> <li>New <a href="http://trac.symfony-project.com/trac/wiki/DevelopersForHire">developers for hire</a>: <ul> <li><a href="http://www.portallabs.com">Portal Labs, LLC</a>: has been developing for Symfony for over two years, starting with v0.6. We've worked on Symfony projects both large and small including our own subscription based digital download delivery service. We are a full service company offering design, development, hosting, and consulting near Greensboro, NC (USA)</li> </ul> </li> </ul> <p><strong>Plugins</strong></p> <ul> <li><strong>New plugins</strong> <ul> <li><a href="http://trac.symfony-project.org/wiki/ysfYUIPlugin">ysfYUIPlugin</a>: provides symfony integration with the Yahoo! User Interface libraries is a complete foundation for enterprise web applications</li> <li>Upcoming plugins: <a href="http://trac.symfony-project.org/browser/plugins/ysfBuildPlugin">ysfBuildPlugin</a>, <a href="http://trac.symfony-project.org/browser/plugins/ysfAPIClientPlugin">ysfAPIClientPlugin</a></li> </ul> </li> <li><strong>Updated plugins</strong> <ul> <li><a href="http://trac.symfony-project.org/wiki/dgDojoPlugin">dgDojoPlugin</a>: updated documentation, added effect pieces to the plugin, added functionality to the DojoManager to handle the style of the Dojo widgets and the body of the layout, removed some unnecessary code in the DojoWidgetHelper.php and added some comments to the helpers, added some more DojoEffects to the set, updated in-file documentation of a lot of the classes, finished adding all available effects that Dojo can do, created some test modules so that a user can see what the effects do and what easing is, started a module to show off the widgets, created an enumeration folder to house things like types and easings</li> <li><a href="http://trac.symfony-project.org/wiki/sfSearchPlugin">sfSearchPlugin</a>: removed xfCriterionImplementer because it clutters the design, and made retorts depend on xfDocumentHit again, updated README warning</li> <li><a href="http://trac.symfony-project.org/wiki/sfLucenePlugin">sfLucenePlugin</a>: removed xfLuceneCriterionImplementer</li> <li><a href="http://trac.symfony-project.org/wiki/sfPropelSearchPlugin">sfPropelSearchPlugin</a>: fixed xfRetort dependency </li> <li><a href="http://trac.symfony-project.org/wiki/sfSymfonySearchPlugin">sfSymfonySearchPlugin</a>: fixed xfRetort dependency</li> <li><a href="http://trac.symfony-project.org/wiki/sfHighlightPlugin">sfHighlightPlugin</a>: removed sfSearch support, this will be completely refactored to support MVC</li> <li><a href="http://trac.symfony-project.org/wiki/sfPropelActAsTaggableBehaviorPlugin">sfPropelActAsTaggableBehaviorPlugin</a>: versionned forms (when the plugin is used with symfony 1.1, forms are generated), allowed triple tags to be unique for a given object, namespace and key, using a plugin's setting, improved and completed the documentation, fixed bug in tags removal, released 0.7 version</li> <li><a href="http://trac.symfony-project.org/wiki/sfMinifyPlugin">sfMinifyPlugin</a>: updated sfMinifyPlugin to current 2.0.1, sfMinify now uses symfony cache folder</li> <li><a href="http://trac.symfony-project.org/wiki/sfDoctrinePlugin">sfDoctrinePlugin</a>: updated Doctrine to 0.11.1 tag, fixed an issue where setting use_dql_callbacks does not actually set it properly</li> <li><a href="http://trac.symfony-project.org/browser/plugins/sfFormtasticPlugin">sfFormtasticPlugin</a>: added ->addField() method to add a field after ->setWidgets() and ->setValidators() have been called, added convenience wrappers around ArrayAccess methods, added validator support to YML forms based on symfony 1.0 validation.yml structure, added option to specify what class to extend to YAML forms, progress on yaml forms (added widget class aliases, added implied validators, added name format, added widget options and attributes, added labels and help messages)</li> <li><a href="http://trac.symfony-project.org/wiki/sfPhorumPlugin">sfPhorumPlugin</a>: refactoring to allow user to define custom usersync function</li> <li><a href="http://trac.symfony-project.org/wiki/sfExtjsThemePlugin">sfExtjsThemePlugin</a>: moved UploadDialog and uploaded new version, added new XCheckBox and added config options to choose your own preffered checkbox, fixed checkbox saving implementation (from int to bool in action.class.php), fixed getAdminColumnForField implementation (not backwards compatible), implemented edit.params generator.yml config option (to set width and other options for the form), start of implementation for formpanel.method.partials (it is working, but can use some further cleanup), fix fox invisible fields in edit-panels, Javascript-Objects from your modules are now automatically lazy-loaded when their xtype isn't registered yet, Javascript isn't injected into the header anymore, a new module (sfExtjsThemePluginXtypeManager) has been added which needs to be enabled in your settings.yml in order to be able to resolve the module/actions for the requested xtypes</li> <li><a href="http://trac.symfony-project.org/wiki/ysfDimensionsPlugin">ysfDimensionsPlugin</a>: created tags + trunk, updated README install directions, cleaned up phpdoc, updated license year</li> <li><a href="http://trac.symfony-project.org/wiki/ysfR3Plugin">ysfR3Plugin</a>: created tags + trunk, cleaned up phpdoc, updated license year</li> <li><a href="http://trac.symfony-project.org/wiki/sfPropelActAsNestedSetBehaviorPlugin">sfPropelActAsNestedSetBehaviorPlugin</a>: enhanced PostgreSQL support</li> <li><a href="http://trac.symfony-project.org/wiki/sfPJSPlugin">sfPJSPlugin</a>: added position parameter to use_pjs method</li> <li><a href="http://trac.symfony-project.org/wiki/sfGuardPlugin">sfGuardPlugin</a>: added the possibility to override the checkPassword() method by providing one in the profile class </li> <li><a href="http://trac.symfony-project.org/wiki/sfPropelPlugin">sfPropelPlugin</a>: fix for model overridding</li> <li><a href="http://trac.symfony-project.org/wiki/sfPropelMigrationsLightPlugin">sfPropelMigrationsLightPlugin</a>: fixed option name conflict in propel:migrate task, fixed invalid package.xml node, bugfix to 1.1 task, released 1.1.1 and 1.1.2 versions</li> <li><a href="http://trac.symfony-project.org/wiki/sfPropelFinderPlugin">sfPropelFinderPlugin</a>: implemented sfDoctrineFinder::findOne(), findFirst(), findLast() and orderBy(), added preliminary support for table aliases (from("Article a")) in Doctrine and Propel finders, implemented sfDoctrineFinder::findBy(), findOneBy(), findPk(), and initialized where()</li> <li><a href="http://trac.symfony-project.org/wiki/sfExtjs2Plugin">sfExtjs2Plugin</a>: added 'this.' to quote except, added a hack to the Ext-Source to be able to check for registered (x)Types, automatically use extjs-all-debug version in symfony-debug-environment, added SimpleStore</li> <li><a href="http://trac.symfony-project.org/wiki/sfCombineFilterPlugin">sfCombineFilterPlugin</a>: added routing rule to config.php, switched to JsMinEnh javascript compression class to improve speed and memory usage, added some checks for request and response type to make things more efficient </li> <li><a href="http://trac.symfony-project.org/wiki/dwPrototypeWindowPlugin">dwPrototypeWindowPlugin</a>: updated documentation for symfony 1.1, released 1.0.0 version for symfony 1.1</li> <li><a href="http://trac.symfony-project.org/wiki/sfPropelActAsRatableBehaviorPlugin">sfPropelActAsRatableBehaviorPlugin</a>: added a class for the rating message DOM element</li> <li><a href="http://trac.symfony-project.org/wiki/ckWebServicePlugin">ckWebServicePlugin</a>: applied some patches, added isSoapRequest to sf1.1 version, updated documentation, released 1.4.1 version</li> </ul> </li> </ul> <p><strong>Some new symfony powered websites</strong></p> <ul> <li><a href="http://www.kuramotokai.com/">kuramotokai.com</a>: (japanese) one of the largest wholesale distributors in Japan</li> <li><a href="http://www.hybel.no/">Hybel.no</a>: (english/norwegian) a web site for publishing classified ads for housing for rent or housing wanted in Norway</li> <li><a href="http://www.bboyunderwear.com">B*Boy</a>: (english) underwear & swimwear for today's fashion conscience man</li> </ul> <p><strong>They talked about us</strong></p> <ul> <li><a href="http://www.eax.fr/2008/07/14/gestion-projet-symfony-svn-subversion-trac/">Gestion de projet symfony avec SVN, Trac et serveur de prod </a></li> <li><a href="http://www.symfony.es/2008/07/14/symfony-en-los-repositorios-oficiales-de-debian/">Symfony en los repositorios oficiales de Debian</a></li> <li><a href="http://www.symfonybr.com/2008/07/15/trabalhando-com-symfony-11-e-doctrine/">Trabalhando com Symfony 1.1 e Doctrine</a></li> <li><a href="http://www.symfony.es/2008/07/15/utilizando-symfony-con-oracle-11g/">Utilizando Symfony con Oracle 11g</a></li> <li><a href="http://blog.hma-info.de/2008/07/15/speaker-at-the-symfony-camp/">Speaker at the symfony Camp</a></li> <li><a href="http://blog.hma-info.de/2008/07/15/speaker-at-the-symfony-camp/">Speaker at the symfony Camp</a></li> <li><a href="http://www.symfonylab.com/flex-symfony/">Flex + Symfony = ?</a></li> <li><a href="http://blog.ronnyristau.de/2008/07/16/symfony-tasks-11/">Symfony 1.1 Tasks</a></li> <li><a href="http://symfonynerds.com/blog/?p=19">Offline version of the Symfony Book</a></li> <li><a href="http://www.symfony.es/2008/07/17/symfony-un-framework-de-cine/">Symfony, un framework de cine</a></li> <li><a href="http://redotheweb.com/2008/07/17/reconciling-propel-and-doctrine/">Reconciling Propel and Doctrine</a></li> <li><a href="http://www.symfonybr.com/2008/07/17/utilizando-um-css-especifico-para-cada-modulo-do-symfony/">Utilizando um CSS específico para cada módulo do symfony</a></li> <li><a href="http://blog.ronnyristau.de/2008/07/17/dbfinder-propel-und-doctrine-gemeinsam-nutzen/">DBFinder - Propel und Doctrine gemeinsam nutzen</a></li> <li><a href="http://www.symfony.es/2008/07/18/otros-cambios-importantes-de-symfony-11/">Otros cambios importantes de Symfony 1.1</a></li> <li><a href="http://blog.fxposter.org/2008/07/20/symfony-11/">Symfony 1.1</a></li> <li><a href="http://www.matthewbull.net/2008/07/20/symfony-11-and-12/">symfony 1.1 and 1.2</a></li> <li><a href="http://adlermedrado.com.br/blog/2008/07/20/vale-a-pena-desenvolver-um-framework-caseiro-ultimamente/">Vale a pena desenvolver um framework caseiro ultimamente?</a></li> <li><a href="http://www.danieleocchipinti.com/blog-linux-php-lamp-web/web-development/symfony/symfony-enable-the-compatibility-with-the-version-10-good-for-forms-generation">Symfony - Enable the Compatibility with the Version 1.0 - Good for forms Generation</a></li> <li><a href="http://theseomantra.com/2008/07/20/removing-meta-nametitle-tag-in-symfony-for-seo/">Removing META name=title tag in Symfony for SEO</a></li> <li><a href="http://foleyfunctional.com/blog/?p=98">Xampp + Symfony + Vista = Headache</a></li> <li><a href="http://d.hatena.ne.jp/balibali/20080720/1216521565">symfonyでInnoDBだ!あれ、MyISAMになってる</a></li> <li><a href="http://www.designing4u.de/2008/07/symfony-no-error-message-on-empty-values-in-not-required-fields/">Symfony - no error message on empty values in not required fields</a></li> <li><a href="http://www.webbasedapplications.de/2008/07/19/unit-tests-mit-dem-symfony-framework/">Unit Tests mit dem Symfony Framework</a></li> <li><a href="http://itsjawad.wordpress.com/2008/07/18/using-sfcryptographp-with-custom-validation/">Using sfCryptographp with custom validation</a></li> </ul>

20 Jul 2008 9:41pm GMT

18 Jul 2008

feedzend framework

Upcoming Zend Webinars

Every week, my good friend Nili arranges a free Webinar for anyone who wants to learn more about PHP. These webinars are always interesting and if they didn't keep me so busy attending conferences (or planning them) I'd be at more of them. Here's a list of the ones that are coming in the next couple of months. Since she works so hard putting these together, I know you are going to want to spare an hour every week or so and attend.



18 Jul 2008 7:54pm GMT

17 Jul 2008

feedCI News

CodeIgniter Community Chieftain Michael Wales

We're happy to announce a new program for exceptional members of the CodeIgniter community, CodeIgniter Community Chieftains. As the community grows, the EllisLab development team often does not have the time that we would like to interact with the community in various ways, but it's always been a key part of our success. So as the need arises, we have created this program to help keep the wheels greased so to speak, making sure that our forums, wiki, and bug tracker are handling the needs of the community and are properly moderated.

This is an invitation only program as the aforementioned link explains, and we're proud to bring Michael Wales on board as our first CodeIgniter Community Chieftain. Most will need no introduction to Michael as you have likely already encountered him or some of his contributions in the community. Welcome aboard, Michael!

17 Jul 2008 7:33pm GMT

16 Jul 2008

feedcakebaker

A use case for the “extract method” refactoring

While refactoring I noticed the following pattern: public function doSomething() { $aVariable = ''; if (X) { $aVariable = 'x'; } else { $aVariable = 'y'; } [...]

16 Jul 2008 4:45pm GMT

feedzend framework

Zend_Acl and MVC Integration Part II (Advanced Use)

In the previous article we saw how to setup our Zend_Acl instance and how to attach it to the MVC environment (by using the Front Controller Plugin), but what about setting another action for the denied access, or how does an article be edited only by its owner?, this, and some more is what we are going to see in the following examples.



16 Jul 2008 1:39pm GMT

13 Jul 2008

feedsymfony Project Blog

A week of symfony #80 (7->13 july 2008)

<p>After the big symfony 1.1 launch, development activity of symfony core has slowed down a bit. In contrast, plugins maintain their great activity with more than 20 plugins updated this week.</p> <p><strong>Development mailing list</strong></p> <ul> <li>Discussions about <a href="http://groups.google.com/group/symfony-devs/browse_thread/thread/6a207e49dd5c7cda">sfFormtasticPlugin</a> and <a href="http://groups.google.com/group/symfony-devs/browse_thread/thread/eabafd1804dc3a8f">alias for routing rules</a></li> </ul> <p><strong>Development highlights</strong></p> <ul> <li><a href="http://trac.symfony-project.org/changeset/10186">r10186</a>, <a href="http://trac.symfony-project.org/changeset/10187">r10187</a>, <a href="http://trac.symfony-project.org/changeset/10188">r10188</a>: [1.0, 1.1, 1.2] added some kind of test for mail_to encoding</li> <li><a href="http://trac.symfony-project.org/changeset/10197">r10197</a>: [1.1, 1.2] fixed typo in plugin:add-channel task</li> <li><a href="http://trac.symfony-project.org/changeset/10198">r10198</a>: [1.1, 1.2] fixed plugin:install task when providing a channel via the --channel option</li> <li><a href="http://trac.symfony-project.org/changeset/10227">r10227</a>: [1.1, 1.2] fixed cache on components</li> <li><a href="http://trac.symfony-project.org/changeset/10235">r10235</a>, <a href="http://trac.symfony-project.org/changeset/10236">r10236</a>: [1.1, 1.2] fixed sfWidgetForm to produce a valid &lt;input&gt; tag in HTML mode</li> <li>Updated <a href="http://trac.symfony-project.com/trac/browser/branches/dwhittle">dwhittle</a> branch</li> <li><a href="http://trac.symfony-project.com/trac/timeline?from=07%2F13%2F2008&daysback=6&milestone=on&ticket=on&changeset=on&update=Update">...and many other changes</a></li> </ul> <p><strong>Development digest</strong>: 110 changesets, 37 defects created, 19 defects closed, 15 enhancements created, 3 enhancements closed, 11 documentation defects created, 8 documentation defects closed and 79 documentation edits.</p> <p><strong>Book and documentation</strong></p> <ul> <li>Updated <a href="http://trac.symfony-project.org/wiki/Symfony12AdminGenerator">Symfony 1.2 Admin Generator Development</a></li> <li>Added some portuguese translations of cookbook tutorials: <a href="http://www.symfony-project.org/cookbook/1_1/pt/plugins">Trabalhando com plugins no symfony 1.1</a></li> </ul> <p><strong>Wiki</strong></p> <ul> <li>New <a href="http://trac.symfony-project.com/trac/wiki/JobPostings">Job Postings</a>: <ul> <li>Symfony Developer @ <a href="http://www.wissensportal.com/">WP Wissensportal GmbH</a> - full-time based in Munich, Germany - Contact: bewerbung [at] wissensportal [dot] com</li> </ul> </li> <li>New <a href="http://trac.symfony-project.com/trac/wiki/DevelopersForHire">developers for hire</a>: <ul> <li>Jonathan Chum (jchum [at] primoplace.com): end-to-end web application developer with 7 years experience in PHP (2 years with Symfony), MySQL DBA, CSS, (X)HTML, and JS (include ajax) coding. I have developed several high availability and scalable applications using Symfony. I reside in San Francisco, CA and available to take on new projects.</li> </ul> </li> </ul> <p><strong>Plugins</strong></p> <ul> <li><strong>New plugins</strong> <ul> <li><a href="http://trac.symfony-project.org/wiki/sfVersioningPlugin">sfVersioningPlugin</a>: helps you to manage the versioning of your project</li> <li><a href="http://trac.symfony-project.org/wiki/sfAjaxDebugPlugin">sfAjaxDebugPlugin</a>: web debug toolbar for AJAX applications</li> <li><a href="http://trac.symfony-project.org/wiki/sfGenerateControllerTaskPlugin">sfGenerateControllerTaskPlugin</a>: easily generate controllers for your symfony 1.1 project</li> <li><a href="http://trac.symfony-project.org/browser/plugins/sfFormtasticPlugin">sfFormtasticPlugin</a>: extends the new sfForm classes to be more developer friendly</li> <li><a href="http://trac.symfony-project.org/browser/plugins/sfPhorumPlugin">sfPhorumPlugin</a>: allows you to embed Phorum into your application</li> </ul> </li> <li><strong>Updated plugins</strong> <ul> <li><a href="http://trac.symfony-project.org/wiki/sfGoogleAnalyticsPlugin">sfGoogleAnalyticsPlugin</a>: fixed compat of logging with sf 1.0, released version 1.1.3</li> <li><a href="http://trac.symfony-project.org/wiki/sfPhpExcelPlugin">sfPhpExcelPlugin</a>: update with PHPExcel 1.6.2, added externals to branches 1.6.2 and add license and changelog for PHPExcel</li> <li><a href="http://trac.symfony-project.org/wiki/sfPropelFinderPlugin">sfPropelFinderPlugin</a>: added sfPropelFinder::combine() method to handle complex queries with And and Or, fixed a problem when looking for a relationship, released 0.3 version, initialized DbFinder and sfDoctrineFinder</li> <li><a href="http://trac.symfony-project.org/wiki/sfCombineFilterPlugin">sfCombineFilterPlugin</a>: moved all config from filter.yml into app.yml</li> <li><a href="http://trac.symfony-project.org/wiki/sfExtjsThemePlugin">sfExtjsThemePlugin</a>: include pjs files last, start of reimplementation of JSON-encoding, rewritten json-autocomplete and json-save-message to action.class as well (removing templates and using json_encode), added documentation for the renderers, renamed flag state from isVeryHidden to isInvisible, addFiltersCriteria bug fix where direct-fieldnames where missing first letter, implemented partials for grid columns, implemented partials for edit/form-panel</li> <li><a href="http://trac.symfony-project.org/wiki/sfYUIPlugin">sfYUIPlugin</a>: refactored main field value getter method</li> <li><a href="http://trac.symfony-project.org/wiki/sfBreadNavPlugin">sfBreadNavPlugin</a>: updated documentation for symfony 1.1</li> <li><a href="http://trac.symfony-project.org/wiki/sfPropel13Plugin">sfPropel13Plugin</a>: added info for sf1.1 and the official plugin</li> <li><a href="http://trac.symfony-project.org/wiki/sfPropelVersionableBehaviorPlugin">sfPropelVersionableBehaviorPlugin</a>: added a deleteHistory() method to remove unused version records</li> <li><a href="http://trac.symfony-project.org/wiki/dkGeshiPlugin">dkGeshiPlugin</a>: refactoring</li> <li><a href="http://trac.symfony-project.org/wiki/sfCaptchaGDPlugin">sfCaptchaGDPlugin</a>: small documentation update</li> <li><a href="http://trac.symfony-project.org/wiki/sfReCaptchaPlugin">sfReCaptchaPlugin</a>: updated for 1.1 compatibility, released 1.1.0 version</li> <li><a href="http://trac.symfony-project.org/wiki/sfExtjs2Plugin">sfExtjs2Plugin</a>: added extra quoteExcept for my project with the theme-plugin</li> <li><a href="http://trac.symfony-project.org/wiki/sfPropelActAsTaggableBehaviorPlugin">sfPropelActAsTaggableBehaviorPlugin</a>: when objects are deleted their tagging should be deleted too, added sort_by_popularity option on the method TagPeer::getAllWithCount(), tag_list helper now can output an ordered list</li> <li><a href="http://trac.symfony-project.org/wiki/sfPropelMigrationsLightPlugin">sfPropelMigrationsLightPlugin</a>: added symfony 1.1 tasks, added auto-generation of first migration, added ->loadSql() method to run SQL from a file, coding standards fixes, set svn:eol-style and svn:keyword properties, released 1.1.0 version</li> <li><a href="http://trac.symfony-project.org/wiki/dgDojoPlugin">dgDojoPlugin</a>: lots of documentation updates</li> <li><a href="http://trac.symfony-project.org/wiki/sfSearchPlugin">sfSearchPlugin</a>: changed xfRetort's dependency on xfDocumentHit to be on xfDocument only</li> <li><a href="http://trac.symfony-project.org/wiki/sfPropelSearchPlugin">sfPropelSearchPlugin</a>: updated xfRetort's dependency</li> <li><a href="http://trac.symfony-project.org/wiki/sfSymfonySearchPlugin">sfSymfonySearchPlugin</a>: updated xfRetort's dependency</li> <li><a href="http://trac.symfony-project.org/wiki/sfLucenePlugin">sfLucenePlugin</a>: removed unneccessary config file</li> </ul> </li> </ul> <p><strong>Some new symfony powered websites</strong></p> <ul> <li><a href="http://www.julksound.com/">JulkSound</a>: (english) make and share fun personalized audio messages. Upload your vocal sample, alter it, mix it, download the resulting mp3 and share it</li> </ul> <p><strong>They talked about us</strong></p> <ul> <li><a href="http://symfonynerds.com/blog/?p=18">The Beauty of sfPropelFinder</a></li> <li><a href="http://www.symfonybr.com/2008/07/08/gerando-feeds-rss-com-sffeed2plugin/">Gerando feeds rss com sfFeed2Plugin</a></li> <li><a href="http://redotheweb.com/2008/07/08/comparing-propel-doctrine-and-sfpropelfinder/">Comparing Propel, Doctrine and sfPropelFinder</a></li> <li><a href="http://br-linux.org/2008/framework-php-symfony-11/">Framework PHP symfony 1.1</a></li> <li><a href="http://www.eax.fr/2008/07/08/comparaison-propel-doctrine-sfpropelfinder/">Comparaison entre Propel, Doctrine et sfPropelFinder</a></li> <li><a href="http://www.leftontheweb.com/message/Details_make_the_difference">Details make the difference</a></li> <li><a href="http://www.vivaphp.com.ar/frameworks/symfony-1.1.html">Symfony 1.1</a></li> <li><a href="http://brajeshwar.com/2008/web-development-frameworks/">Choosing a web development framework</a></li> <li><a href="http://www.symfony.es/2008/07/09/comparando-propel-doctrine-y-propelfinder/">Comparando Propel, Doctrine y PropelFinder</a></li> <li><a href="http://www.symforc.com/post/2008/07/10/Foreign-keys-onDelete-for-dummies">Foreign key's onDelete for dummies</a></li> <li><a href="http://www.oracle.com/technology/pub/articles/gogala-symfony.html">Oracle Symfony in PHP Minor</a></li> <li><a href="http://pookey.co.uk/blog/archives/55-Intergrating-phorum-into-symfony.html">Intergrating phorum into symfony</a></li> <li><a href="http://www.symfony.it/articoli/35/oracle-usa-symfony/">Oracle usa Symfony</a></li> <li><a href="http://blog.rajatpandit.com/2008/07/13/symfony-init-batch/">symfony init-batch</a></li> <li><a href="http://451f.com.ua/2008/07/13/symfony-debian-ubuntu-package/">Symfony стала доступна в официальном репозитории Debian / Ubuntu Linux</a></li> <li><a href="http://www.mocw.cn/?p=284">四天内制作一个网站的四点纪要</a></li> <li><a href="http://motd.ambians.com/news/symfony-available-official-debian-repositories">symfony available from official Debian repositories</a></li> <li><a href="http://idiigo.com/html/2008/119-10-introduced-the-development-framework-for-php.html">介绍十款PHP开发框架</a></li> <li><a href="http://baidarkas.net/ple/pablo/weblog/10.html">¿Una framewok para toda la vida?</a></li> </ul>

13 Jul 2008 9:39pm GMT

11 Jul 2008

feedcakebaker

findCount vs. hasAny

While changing some code to make use of the new Containable behavior I noticed code snippets that looked like: // in a model method if ($this->findCount($conditions) > 0) { // do something } If you look at this example you will realize that what the code tells us is slightly different from what the intention of [...]

11 Jul 2008 2:10pm GMT

feedsymfony Project Blog

symfony available from official Debian repositories

Some of you may have followed the mailing list posts about the Debian / Ubuntu package recently. The people using those Linux distributions will be glad to hear that symfony 1.0 is now officially part of the Debian distribution. For now, it is in the «unstable» repository, no doubt it will be soon present in «testing». Big thanks go to Martin Meredith, the official maintainer of the package, for his remarkable work. He ensured all licenses of all files composing the framework were compatible with the Debian licensing policy. We are now working at packaging symfony 1.1 (creating man page, studying dependencies etc...). Both packages will be installable on a same server with the Debian's alternative mechanism. For those who were using the symfony repository, the package 1.0.x will still be maintained the time for administrators to change their sources.list. symfony 1.1 will only be available from the official Debian repository.

11 Jul 2008 2:06pm GMT

09 Jul 2008

feedzend framework

Erwin Earley writes on PHP and the Zend Framework

If you are in the i5 community then you know the name Erwin Earley. Recently Erwin published an article on itjungle.com on using the Zend Framework. Click on inside and let's take a look.



09 Jul 2008 6:34pm GMT

08 Jul 2008

feedCI News

CodeIgniter Brazil

Hermes Alves has launched a CodeIgniter resource in Portuguese, located at codeigniter.com.br. The site includes a discussion forum, mailing-list, and a few other resources. Kudos Hermes!

08 Jul 2008 5:08pm GMT

feedcakebaker

Not everything has to be public

Yesterday, Felix Geisendörfer recommended in an article not to use private/protected properties and methods and called them "one of the most stupid concepts of OOP". I disagree with him, because visibility is one of the essential concepts of OOP. Let me explain why with a short story. Max and Moritz both own a coke machine. [...]

08 Jul 2008 9:20am GMT

feedWithCake.com Companies Hiring

Earth.org

http://www.earth.org/

Web 2.0 programmer for Earth.org (LAMP) (remote, part-time or fulltime) At Earth.org we are building a Web2.0 travel guide with a responsible mindset, collaboratively sourced from users and travellers around the world. And we're not just talk about being responsible: At least 50% of our profits will go into environmental, social and cultural projects. We are a 100% remote team around the world working on the initial beta which has been silently launched and needs your support to get off the ground. We are a small, open-minded and dedicated team and are looking for people who can work independently at the workplace of their choice - be it a beach in Goa, a cafe in Paris or your bedroom in San Francisco. Earth.org is looking for a passionate Web 2.0 programmer (20 to 40 hours/week), who will play a central role in the technical development of Earth.org. Your tasks: - Separation of business logic and presentation through the use of an MVC framework (specifically cakePHP) - Interaction with remote APIs through several means, including AJAX and possibly sockets - Reuse and integration of publicly available components like Zend framework Our requirements: - Minimum of 2 years experience in the LAMP environment. - Ideally CakePHP and server administration experience. - Ideally you have a degree in computer science. - You know and use Web 2.0 applications (e.g. APIs, mashups), ideally you programmed in the field of web 2.0. - Strong grasp of the English language. - Ideally remote work experience, at least you have the ability to work with people from other countries, cultures, languages and belief structures. - You share our environmental, social and cultural friendly mindset. We can only take replies that contain: - A detailed description of your experience regarding our requirements - Your hourly fee Location: remote work at your preferred location Time horizon: minimum 12 months, preferable long-term Interested? Contact us at: E-mail: work@earth.org See all Earth.open positions here: http://www.earth.org/pages/jobs

08 Jul 2008 7:25am GMT

06 Jul 2008

feedsymfony Project Blog

A week of symfony #79 (30 june -> 6 july 2008)

<p>After months of development, symfony published its long-awaited 1.1.0 version during this week. Furthermore, symfony project achieves its maturity with the <a href="http://trac.symfony-project.org/changeset/10000">10,000th changeset</a> of its source code. And this is just the beginning, because <a href="http://www.symfony-project.org/blog/2008/07/01/symfony-1-2-roadmap">the next version of symfony</a> will be published in less than 4 months.</p> <p><strong>Development mailing list</strong></p> <ul> <li>Lots of interesting discussions during this week: <a href="http://groups.google.com/group/symfony-devs/browse_thread/thread/018e129b0354a30f"> input filtering rfc</a>, <a href="http://groups.google.com/group/symfony-devs/browse_thread/thread/1c7759aa20a29d34">changing the way plugins provide web assets</a>, <a href="http://groups.google.com/group/symfony-devs/browse_thread/thread/a50ce245f4054869">symfony 1.1 deploy task</a> and <a href="http://groups.google.com/group/symfony-devs/browse_thread/thread/588435298b373efc"> roadmap for helpers in symfony 1.2</a></li> </ul> <p><strong>Development highlights</strong></p> <ul> <li><a href="http://trac.symfony-project.org/milestone/1.1.0">Completed Milestone 1.1.0</a></li> <li><a href="http://trac.symfony-project.org/changeset/9991">r9991</a>: [1.2] Created 1.2 branch</li> <li><a href="http://trac.symfony-project.org/changeset/10000">r10000</a>: [1.2] first commit towards symfony 1.2</li> <li><a href="http://trac.symfony-project.org/changeset/10005">r10005</a>: [tools/lime] fixed potential notice during a test failure</li> <li><a href="http://trac.symfony-project.org/changeset/10009">r10009</a>, <a href="http://trac.symfony-project.org/changeset/10010">r10010</a>: [1.1, 1.2] fixed possible notice in sfSimpleAutoload</li> <li><a href="http://trac.symfony-project.org/changeset/10019">r10019</a>: [1.1] IPv6 compat fix for IP check in generated dev controller</li> <li><a href="http://trac.symfony-project.org/changeset/10029">r10029</a>: [1.0] fixed argv may not be registered by PHP</li> <li><a href="http://trac.symfony-project.org/changeset/10040">r10040</a>, <a href="http://trac.symfony-project.org/changeset/10041">r10041</a>: [1.1, 1.2] fixed session id regeneration to only regenerate the id if there is a change</li> <li><a href="http://trac.symfony-project.org/changeset/10059">r10059</a>: [1.0, 1.1, 1.2] fixed opendir closed by fclose instead of closedir</li> <li><a href="http://trac.symfony-project.org/changeset/10060">r10060</a>: [1.2] added ->getRemoteAddress() to get the client's IP address and ->getForwardedRemoteAddress() to get the IP address from behind a proxy</li> <li><a href="http://trac.symfony-project.org/changeset/10078">r10078</a>: [1.2] moved all prototype and scriptaculous related stuff into the new core sfProtoculusPlugin</li> <li><a href="http://trac.symfony-project.org/changeset/10115">r10115</a>, <a href="http://trac.symfony-project.org/changeset/10116">r10116</a>: [1.1, 1.2] fixed typo in sfMySQLSessionStorage.class.php</li> <li><a href="http://trac.symfony-project.org/changeset/10124">r10124</a>: [1.2] moved web content of protoculus plugin. removed default and commented default from 1.2 settings.yml and added them to plugin settings.yml</li> <li><a href="http://trac.symfony-project.org/changeset/10147">r10147</a>: [1.2] updated sfLoader to load helpers from bundled plugins</li> <li>Updated <a href="http://trac.symfony-project.com/trac/browser/branches/dwhittle">dwhittle</a> branch</li> <li><a href="http://trac.symfony-project.com/trac/timeline?from=07%2F06%2F2008&daysback=6&milestone=on&ticket=on&changeset=on&update=Update">...and many other changes</a></li> </ul> <p><strong>Development digest</strong>: 154 changesets, 63 defects created, 26 defects closed, 6 enhancements created, 4 enhancements closed, 13 documentation defects created, 4 documentation defects closed and 102 documentation edits.</p> <p><strong>Book and documentation</strong></p> <ul> <li>Updated <a href="http://trac.symfony-project.org/wiki/Documentation/fr_FR/EnvoyerDesMails/Gmail">Envoyer des mails avec Gmail</a>, <a href="http://trac.symfony-project.org/wiki/HowToPatchTablesForI18nFromGeneratedSchema">How to patch tables for I18n from a reverse-engineered database</a> pages</li> <li>Updated <a href="http://www.symfony-project.org/askeet/1_0/en/1">first chapter of Askeet tutorial</a></li> <li>Created <a href="http://trac.symfony-project.org/wiki/Symfony12AdminGenerator">Symfony 1.2 Admin Generator Development</a> page</li> <li>Added hungarian translation of the first chapter of forms book: <a href="http://www.symfony-project.org/book/forms/1_1/hu/01-Form-Creation">1. fejezet - Űrlap készítés</a></li> <li>Added some german translations of cookbook tutorials: <a href="http://www.symfony-project.org/cookbook/1_1/de/pager">Anleitung zum Erstellen von blätterbaren Listen</a>, <a href="http://www.symfony-project.org/cookbook/1_1/de/plugins">Wie man mit Plugins in Symfony 1.1 arbeitet</a></li> <li>Added some japanese translations of cookbook tutorials: <a href="http://www.symfony-project.org/cookbook/1_1/ja/cli">コマンドラインインターフェイス</a></li> <li>Added some spanish translations of cookbook tutorials: <a href="http://www.symfony-project.org/cookbook/1_1/es/alternative_schema">Sintaxis alternativa del esquema</a>, <a href="http://www.symfony-project.org/cookbook/1_1/es/cli">La interfaz de línea de comandos</a> and <a href="http://www.symfony-project.org/cookbook/1_1/es/behaviors">Cómo crear comportamientos de Propel</a></li> <li>Added some portuguese translations of cookbook tutorials: <a href="http://www.symfony-project.org/cookbook/1_1/pt/tasks">Como criar uma tarefa</a></li> </ul> <p><strong>Wiki</strong></p> <ul> <li>New <a href="http://trac.symfony-project.com/trac/wiki/JobPostings">Job Postings</a>: <ul> <li>Symfony/PHP Developers and Project Manager @ <a href="http://www.iac.fr">www.iac.fr</a> - full-time based in Paris, France - Contact: benoit.spolidor [at] iac [dot] fr</li> <li>Symfony Developer @ <a href="http://littlesis.org">LittleSister</a> - full-time based in San Francisco, New York, Buffalo, or possibly remote - <a href="http://littlesis.org/jobs">More information</a></li> </ul> </li> <li>New <a href="http://trac.symfony-project.com/trac/wiki/SymfonyBloggers">symfony blogger</a>: <ul> <li>shiny@/dev/random (<a href="http://shiny.ma3x.net/tag/symfony">website</a>, <a href="http://shiny.ma3x.net/category/symfony/feed">feed</a>)</li> </ul> </li> </ul> <p><strong>Plugins</strong></p> <ul> <li><strong>New plugins</strong> <ul> <li><a href="http://trac.symfony-project.org/wiki/sfFixtureFilesPlugin">sfFixtureFilesPlugin</a>: simple pake task allowing for separate load single yml files from data/fixtures directories</li> <li><a href="http://trac.symfony-project.org/wiki/sfPropelManualOrderPluginFor11">sfPropelManualOrderPluginFor11</a>: adds simple manual ordering/sort for the admin generator of symfony 1.1</li> <li><a href="http://trac.symfony-project.org/wiki/sfGenerateValidatorPlugin">sfGenerateValidatorPlugin</a>: generates validators from schema.yml</li> </ul> </li> <li><strong>Updated plugins</strong> <ul> <li><a href="http://trac.symfony-project.org/wiki/sfGuardPlugin">sfGuardPlugin</a>: added 1.2 branch, added sf_guard_plugin_signin_form configuration, fixed guard:promote task and added guard:add-permission and guard:add-group tasks, fixed signin action when remember feature is disabled, fixed authorization removal when the session timeout, customized sfGuardUserForm with sensible defaults, fixed primary key problem in sfGuardUserForm</li> <li><a href="http://trac.symfony-project.org/wiki/sfPropelSearchPlugin">sfPropelSearchPlugin</a>: removed absolute file path to my home folder</li> <li><a href="http://trac.symfony-project.org/wiki/sfSymfonySearchPlugin">sfSymfonySearchPlugin</a>: fixed unit test for 1.1.0-final</li> <li><a href="http://trac.symfony-project.org/wiki/sfExtjsThemePlugin">sfExtjsThemePlugin</a>: added more options to allow user-params from the generator to override default properties for grids, rewritten lots of methods and removed some hacks fixes for (foreign-key)PHP-names and custom-method-PHP-names, changed code for getI18NString-method, implemented object_name at several places which can replace module name in text/titles if defined in generator</li> <li><a href="http://trac.symfony-project.org/wiki/sfPropelSlotBehaviorPlugin">sfPropelSlotBehaviorPlugin</a>: released 0.1.6 version</li> <li><a href="http://trac.symfony-project.org/wiki/sfSWFUploadPlugin">sfSWFUploadPlugin</a>: released 1.0.1 version</li> <li><a href="http://trac.symfony-project.org/wiki/sfPropelPollsPlugin">sfPropelPollsPlugin</a>: minor bugfix (on edit answer action, when the user click cancel, the answer text was replaced by the string 'null'), add magic method call for i18n</li> <li><a href="http://trac.symfony-project.org/wiki/ckWebServicePlugin">ckWebServicePlugin</a>: created branch for new wsdl generator, refactoring, started implementation of ckWsdlBindingDecorators</li> <li><a href="http://trac.symfony-project.org/wiki/sfExtjs2Plugin">sfExtjs2Plugin</a>: improved documentation, added mapping config-options for ExtJs Objects</li> <li><a href="http://trac.symfony-project.org/wiki/sfLucenePlugin">sfLucenePlugin</a>: updated trunk README</li> <li><a href="http://trac.symfony-project.org/wiki/sfAdvancedAdminGeneratorPlugin">sfAdvancedAdminGeneratorPlugin</a>: list title can display foreign_class value for a nested generator, added _has_many_CLASS_PLURAL (creates a link to a many part of the relationship, created with foreign_class: key), symfony propel-init-advanced-admin task added, skeleton added, auto validator creation </li> <li><a href="http://trac.symfony-project.org/wiki/dgDojoPlugin">dgDojoPlugin</a>: updated documentation</li> <li><a href="http://trac.symfony-project.org/wiki/sfPageControllerPlugin">sfPageControllerPlugin</a>: updated documentation</li> <li><a href="http://trac.symfony-project.org/wiki/sfPropelFinderPlugin">sfPropelFinderPlugin</a>: added sfPropelFinderPager class, sfPropelFinder::paginate() and sfPropelFinder::groupBy() methods, added i18n capabilities, changed Exception class, added sfPropelFinder::set() method, made the plugin Propel 1.3 compatible, fixed problem when guessing relation on a table with a special phpName, harmonized class-peerClass conversions, added a prove.php test file to launch all tests at once in a test harness, moved utility methods as static methods of a third-party class to take some weight off the main class, made join() useless if there is an explicit where() on the table afterwards, added the ability to do left, right, and inner joins in a simple way, added support for with() in findPk(), fixed i18n relations when hydrating</li> <li><a href="http://trac.symfony-project.org/wiki/sfPaypalLitePlugin">sfPaypalLitePlugin</a>: added sample credit card info</li> <li><a href="http://trac.symfony-project.org/wiki/sfPropelPlugin">sfPropelPlugin</a>: fixed plugin config path, removed 1.0 compatability layer, fixed formatting</li> <li><a href="http://trac.symfony-project.org/wiki/mwOpenFlashChartPlugin">mwOpenFlashChartPlugin</a>: updated documentation</li> <li><a href="http://trac.symfony-project.org/wiki/sfStatsPlugin">sfStatsPlugin</a>: fixed button formatting, fixed smart value getters on table where the pk name is not id</li> <li><a href="http://trac.symfony-project.org/wiki/sfSearchPlugin">sfSearchPlugin</a>: updated README, fixed documentation filenames to follow symfony documentation file standards, moved quick start guide to recipes</li> <li><a href="http://trac.symfony-project.org/wiki/sfCombineFilterPlugin">sfCombineFilterPlugin</a>: moved cache generation/management into the filter, removed .htaccess modification requirements, added compress_js and compress_css options to the filter, added client side caching for the packed files and improved the request name so it will cache properly, added routing rules to route to the sfCombineFilter module, added non-harmfull css compressor as JSMin can mess up the css for some javascript libraries, fixed a bug where the Asset helper was not being initialized, allow adding extra css-filter-paths with app.yml</li> <li><a href="http://trac.symfony-project.org/wiki/sfN1IterationPlugin">sfN1IterationPlugin</a>: updated documentation, released 0.1.4 version</li> <li><a href="http://trac.symfony-project.org/wiki/sfThumbnailPlugin">sfThumbnailPlugin</a>: fix mime type check</li> </ul> </li> </ul> <p><strong>Some new symfony powered websites</strong></p> <ul> <li><a href="http://www.rexgauge.com/">Rex Gauge Durometers</a>: (english) durometers and shore durometer hardness testers online store</li> <li><a href="http://dontbuythegames.org/en/">DONTBUYTHEGAMES.ORG</a>: multilingual (en, zh, es, fr) website to show you believe in the Olympic Ideal</li> <li><a href="http://www.emplet.fr/">Emplet.fr</a>: (french) shopping online press releases and directory</li> </ul> <p><strong>They talked about us</strong></p> <ul> <li><a href="http://www.symfony.es/2008/06/29/se-publica-symfony-1017/">Se publica Symfony 1.0.17</a></li> <li><a href="http://www.symfony.es/2008/06/29/se-publica-la-version-final-de-symfony-11/">Se publica la versión final de Symfony 1.1</a></li> <li><a href="http://blog.hma-info.de/2008/06/29/symfony-11-has-been-released/">symfony 1.1 has been released</a></li> <li><a href="http://www.symfony.it/articoli/34/symfony-11-e-stato-rilasciato/">Symfony 1.1 è stato rilasciato</a></li> <li><a href="http://symfonynerds.com/blog/?p=16">Symfony 1.1 Released - It's music to our ears...</a></li> <li><a href="http://prendreuncafe.com/blog/post/2008/06/30/Symfony-11-est-dans-les-bacs">Symfony 1.1 est dans les bacs</a></li> <li><a href="http://blog.ronnyristau.de/2008/06/30/symfony-11-released/">Symfony 1.1 released</a></li> <li><a href="http://www.cryptonet.be/blog/programmatie/symfony-11-beschikbaar-voor-gebruik">Symfony 1.1 beschikbaar voor gebruik</a></li> <li><a href="http://www.symforc.com/post/2008/07/01/Symfony-11-is-out-and-the-winner-is-12">Symfony 1.1 is out, and the winner is... 1.2!</a></li> <li><a href="http://www.symfony.es/2008/07/01/la-hoja-de-ruta-de-symfony-12/">La hoja de ruta de Symfony 1.2</a></li> <li><a href="http://www.symfony-framework.com/2008/07/02/do-you-will-use-symfony-11-or-do-you-will-wait-for-symfony-12/">Will you use Symfony 1.1 or will you wait for Symfony 1.2?</a></li> <li><a href="http://redotheweb.com/2008/07/02/sfpropelfinder-now-with-i18n-pagination-and-update-queries/">sfPropelFinder: Now With I18n, Pagination and Update Queries</a></li> <li><a href="http://www.symfonybr.com/2008/07/02/enviando-uma-newsletter-com-swift-e-symfony/">Enviando uma newsletter com Swift e Symfony</a></li> <li><a href="http://mirthlab.com/2008/07/03/symfony-11-stable-released/">Symfony 1.1 Stable Released</a></li> <li><a href="http://pookey.co.uk/blog/archives/54-Doctrine-Presentation.html">Doctrine Presentation</a></li> <li><a href="http://www.symfonybr.com/2008/07/04/instalando-plugins-no-symfony-11/">Instalando plugins no symfony 1.1</a></li> <li><a href="http://www.tech-recipes.com/rx/2924/symfony_propel_how_to_left_join">Symfony / Propel: How to Left Join</a></li> <li><a href="http://shiny.ma3x.net/2008/07/01/symfony-11-is-out">Symfony 1.1 is out</a></li> <li><a href="http://shiny.ma3x.net/2008/07/02/a-successful-story-with-sfguardplugin-its-remember-me-function">A successful story with sfGuardPlugin & it's Remember me function</a></li> <li><a href="http://shiny.ma3x.net/2008/07/03/sfguardplugin-remember-me-follow-up">sfGuardPlugin & Remember me follow up</a></li> <li><a href="http://www.symfony.es/2008/07/06/la-nueva-documentacion-de-symfony-11/">La nueva documentación de Symfony 1.1</a></li> <li><a href="http://osterman.com/wordpress/2008/07/05/what-to-do-if-spl_autoload_call-hasnt-defined-the-class">What to do if spl_autoload_call() hasn't defined the class</a></li> <li><a href="http://asiermarques.com/2008/07/06/cosas-que-se-aprenden-creando-un-sitio-web-en-4-dias/">Cosas que se aprenden creando un sitio web en 4 días</a></li> <li><a href="http://blog.movchan.net/2008/07/05/symfony-luchshiy-freymvork-na-php/">Symfony - лучший фреймворк на PHP</a></li> <li><a href="http://www.alexfilatov.com/2008/07/04/migration-to-symfony-11-first-steps/">Migration to Symfony 1.1: First step</a></li> <li><a href="http://socialcmsbuzz.com/symfony-the-web-php-framework-updated-to-v11-04072008/">Symfony The Web PHP Framework Updated To v1.1</a></li> </ul>

06 Jul 2008 9:32pm GMT

04 Jul 2008

feedcakebaker

Named finder methods

Recently, I stumbled upon a new Rails feature called named_scope. Inspired by this feature I wrote - just for fun - a small behavior which allows you to define named finder methods (download). Let's say we want to define a named finder method to get the most recent posts. The code for it is quite straightforward [...]

04 Jul 2008 3:28pm GMT

01 Jul 2008

feedsymfony Project Blog

symfony 1.2 roadmap

As [symfony 1.1 is now out of the door](http://www.symfony-project.org/blog/2008/06/30/the-wait-is-over-symfony-1-1-released), it's time to talk about the next symfony version. 1.1 was a very special version for the symfony framework. As you might know, we have done a lot of work on the [internal refactoring](http://www.symfony-project.org/blog/2008/06/23/the-symfony-1-1-architecture). This was needed to ease the evolution of the framework. As this refactoring is now behind us, we can focus again on new exciting features that will *ease the developer life by simplifying its day-to-day job*. Planned features ---------------- So, without further ado, here is the list of new features planned for symfony 1.2: * The **admin generator** will be rewritten from scratch to leverage the new form framework. The main goal is to provide a more customizable and a more flexible admin generator. * The Propel plugin and the **Doctrine plugin** will be bundled with symfony 1.2. So, as of symfony 1.2, the core team will officially support Doctrine as a first class citizen. * The development of secure applications has always been quite easy with symfony thanks to the use of the ORM, the output escaper, and the CSRF protection. Symfony 1.2 will go one step further by providing **native input filtering**. We will base this feature on the new `filter` extension bundled with PHP 5.2. * The framework must simplify the life of the developer on repetitive and boring activities. As most applications send emails, the **Swift library**, one of the most feature-full and flexible solution for sending emails in PHP, will be integrated into the core. * The JavaScript world evolves very quickly, with lot of great frameworks available (prototype, jQuery, Dojo, mootools, and YUI). As we don't want to force you to use a specific library, we will move all the **JavaScript stuff into a plugin**. * The **`project:deploy` task** was just a proof of concept. So, it is time to start a discussion on the features we need for a proper deployment task. * We will also take advantage of the new features of **PHP 5.2**, which will be the minimum version of PHP required to use symfony. That's a lot of exiting stuff! Apart from the main features planned for 1.2, we will of course also have some minor new features and enhancements. Release management ------------------ As more people join the core team, we must have a better and more transparent management process. So, 1.2 will introduce a new way of managing the symfony release lifecycle. The symfony 1.2 release will be **date-driven**. The release date is already set to **October 2008**. Yes, in just four months. To make it possible, each feature will be driven by a member of the core team: * **Fabien Potencier**: New admin generator * **Dustin Whittle**: Upgrade to Propel 1.3 * **Jonathan Wage**: Doctrine integration * **Tristan Rivoallan**: Input filtering * **Nicolas Perriault**: Integration of Swift * **Fabian Lange**: Make a plugin out of all the JavaScript stuff * **Tristan/Dustin**: New `project:deploy` task * **Dustin Whittle**: Removal of the 1.0 compatibility plugin (`sfCompatPlugin`) Among all these features, only the admin generator is a *must-have*. All other features are *nice-to-have*. The process will be the following: * Each feature is developed in its own branch * Before the release of the first 1.2 Release Candidate, the release manager will have two possibilities for each feature: * Merge it into the 1.2 branch (the feature must be feature complete, tested, and the documentation must be updated) * Postponed until the next symfony release So, the release manager will have the last word on which features can be merged back into the 1.2 branch. I'm pretty happy that **Fabian Lange** will take on the responsibility of being the release manager for 1.2. He knows symfony very well, and he has already done a tremendous amount of work on the symfony 1.0 and 1.1 versions. I'm sure he will be a great release manager.

01 Jul 2008 9:26am GMT

30 Jun 2008

feedCI News

CodeIgniter Community Voice - Mathew Davies

EllisLab is blessed with two of the greatest communities that can be found anywhere on the internet in ExpressionEngine and more recently CodeIgniter. Despite being a relative newcomer to the scene, the people attracted to CodeIgniter are among the smartest, most talented and down-to-earth developers around today. From time to time we want to highlight some of these talented people, and we've asked them to lend their voice to ours. Have your voice. I hope you enjoy what they have to say as much as I did.

This week, our Community Voice author is Mathew Davies (AKA Popcorn), author of the Redux Authentication library, a light, easy to use and fully featured auth engine. What follows is a brief discussion of some of the logic and security that went into the library, and considerations for your own programming.


Let me start by saying I love CodeIgniter, it's a developers dream. smile

Today I plan to talk about some of the security features that are used within my library : Redux Authentication.

Hash Once and Only Once!

Over at TalkPHP someone provided a code snippet which had this code :

$psd = sha1(md5(md5(sha1(md5(sha1(sha1(md5($_POST['password']))))))));

I've made a similar mistake myself in the past. Someone on the CodeIgniter forums pointed out that a solution like the above will actually increase the probability of a collision. Here's what inparo had to say :

"It's safer if you only hash it once. The initial string is random in both length and characters. The first sha1 gives you a fixed length and reduced character set. By hashing this again you're actually increasing the probability of collisions."

So there you go folks, hash once. This also leads nicely to my next topic "salts"

Salts

A lot of people when hashing passwords will do something like this :

$password = md5($password);

You may think this is secure, but actually it's very insecure. Websites exist which store hashes of dictionary words, so if your database was ever stolen, the passwords could be looked up and revealed. This is where the power of the password salt comes in. Salts come in two varieties : A dynamic salt and a static salt. A dynamic salt is automatically generated and is usually very hard to guess. A good example of a dynamic salt would be :

$salt = microtime();

It's not totally random, but you get the idea.

You would then concatenate the salt along with the password to provide a new hash. This new hash can't be looked up because of it's "randomness". You would then store it with other user info and select it when you need to log them in.

I know what you're thinking. If the database is stolen they've got the password and the dynamic salt "What good is that?!" This is where a static salt comes in.

A static salt is just that, a variable that is random in both length and characters. This is best stored in a configuration file somewhere. You then combine this with the dynamic salt to provide a very secure solution. Reasons being: (a) If the database is stolen, they are missing the static salt; (b) Two passwords the same will result in a different hash. Here's an example:

$dynamic_salt = microtime();
$static_salt = 'qGPBA8iCM3cUuCbBAQx3E0uOkKTrSeEUiSrAkykEk4sEniyP67Q2BTp8vtDqoqw'; // Grabbed from file.
$password = 'password'; // Password from input form.

$hashed_password = sha1($dynamic_salt.$password.$static_salt); // Super Secure!

Forgotten Password

Ooops, the user has forgotten their password. What are we going to do? Michael Wales made a well informed post about this topic a while ago, but it was recently lost.

The best method is to use a secret question and answer system coupled with email verification.

The logic would be something like this:

User requests new password -> Sends email verification code -> Verification code is looked up in the database -> Show secret question -> Check Answers

I prefer this system because a hacker could of got into your email account and requested a new password, but would then struggle to get your secret question right. Keeping the users account secure.

DB Sessions

This will be a quick talk. At the moment Redux stores a "users_id" in the session cookie and uses this to figure out if the user is logged in or not. A hacker could use the algorithm in CodeIgniter's session library and craft his own cookie with a fake "user_id".

Database sessions move this data from the clients cookie to the database providing a scenario where the client can't edit it. Redux doesn't currently use this, but it is in the works.

Thanks for listening to me babble on, hope you enjoyed it.

PS : All examples above are used in Redux so go download it smile

- Mathew Davies

Discuss this article

30 Jun 2008 9:07pm GMT

29 Jun 2008

feedsymfony Project Blog

The wait is over: symfony 1.1 released

<p> As you may know, we have been working for a very long time on the next stable version of symfony. Now the day has come to celebrate the immediate availability of the long awaited 1.1 stable release of the symfony framework!</p> <p> Fabien, the core team, and contributors have achieved a tremedous amount of work to provide a full set of exciting new features. We have already <a href="http://www.symfony-project.org/blog/2008/03/25/symfony-1-1-beta-2-released-what-s-new" title="talked a lot about them">talked a lot about them</a>, but one more time, here is what you get in symfony 1.1: </p> <ul> <li> The <a class="ext-link" href="http://www.symfony-project.org/blog/2008/06/23/the-symfony-1-1-architecture">new architecture of symfony</a> is more configureable and decoupled, allowing you to use or replace part of the framework very easily, </li> <li> The new object-oriented <a class="ext-link" href="http://www.symfony-project.org/book/forms/1_1/">form framework</a> makes form creation and reuse a breeze, </li> <li> The <a class="ext-link" href="http://www.symfony-project.org/cookbook/1_1/en/tasks">brand new task system</a> allows to quicly make extensible batch scripts and command line utilities, </li> <li> Symfony has now a decent <a class="ext-link" href="http://www.symfony-project.org/blog/2008/06/19/yaml-in-symfony-1-1">YAML parser</a>, with verbose error reporting, </li> <li> The new plugin manager is now compatible with the PEAR standard API, handles plugins dependencies, and provides options for a better control on what you install, </li> <li> The <a href="http://www.symfony-project.org/cookbook/1_1/en/iphone" title="formats handling system">formats handling system</a> can make your app behave and respond differently whether an iPhone, a bot, or a browser is requesting it, </li> <li> The Propel 1.2 ORM is now <a class="ext-link" href="http://trac.symfony-project.com/browser/branches/1.1/lib/plugins/sfPropelPlugin">bundled as a plugin</a>, which means you can very easily switch to <a class="ext-link" href="http://www.symfony-project.org/cookbook/1_1/en/doctrine" title="Doctrine">Doctrine</a> or even to <a href="http://www.symfony-project.org/cookbook/1_1/en/propel_13">Propel 1.3</a> if you prefer, </li> <li> The <a class="ext-link" href="http://trac.symfony-project.com/browser/branches/1.1/lib/plugins/sfCompat10Plugin">bundled sfCompat10Plugin</a> will ensure that your 1.0 based projects will still work after having upgraded to 1.1! </li> <li> The routing is now cached, so you can expect a significant performance boost when you got plenty of routes in your app. Also, the routing class is no more a singleton so you can now extend and reference it easily to fit your needs, </li> <li> Even if that's not really a feature, more than 8,500 unit and functional tests guarantee the overall stability of the framework codebase. We doubled the number of tests between 1.0 and 1.1! </li> </ul> <h3> Installing and updating symfony </h3> <p> To install symfony 1.1 via PEAR, you have now to explicitely declare the version you want to install. So, if you want to install the 1.1.0 version stable, you must run: </p> <pre class="command-line">$ pear install symfony/symfony-1.1.0 </pre> <p> Whereas if you want the 1.0 version stable: </p> <pre class="command-line">$ pear install symfony/symfony-1.0.17 </pre> <p> If you prefer to download a standalone archive, grab the <a href="http://www.symfony-project.org/get/symfony-1.1.0.tgz" title="symfony-1.1.0.tgz">symfony-1.1.0.tgz</a> or the <a href="http://www.symfony-project.org/get/symfony-1.1.0.zip" title="symfony-1.1.0.zip">symfony-1.1.0.zip</a> archive and uncompress it somewhere on your disk. </p> <p> If you are new to symfony, maybe the simplest solution is to download the sandbox : </p> <ul> <li> <a href="http://www.symfony-project.org/get/sf_sandbox_1_1.tgz">sf_sandbox_1_1.tgz</a> </li> <li> <a href="http://www.symfony-project.org/get/sf_sandbox_1_1.zip">sf_sandbox_1_1.zip</a> </li> </ul> And if you are a SVN afficionado, just checkout the 1.1 branch: <pre class="command-line">$ svn co http://svn.symfony-project.com/branches/1.1/ /path/to/symfony </pre> <p> Everything else is explained in great details in the <a href="http://www.symfony-project.org/installation/1_1" title="symfony installation guide">symfony installation guide</a>. </p> <h3> Upgrading your existing symfony projects </h3> <p> If you plan to upgrade an existing symfony 1.0 based app to use the brand new 1.1 version, please read carefully the <a href="http://trac.symfony-project.com/browser/branches/1.1/UPGRADE" title="UPGRADE">UPGRADE</a> file bundled in every distributed package and versionned in the SVN repository. If you are currently using symfony RC2 in your project, just be sure to run the <tt>symfony project:upgrade</tt> command just after having updated the symfony library. </p> <p> As a side note regarding the symfony repository (which has just passed the <a class="ext-link" href="http://trac.symfony-project.com/changeset/10000">10.000th commit</a>), and because we have today two stable versions of symfony (1.0 and 1.1), the <em>trunk</em> directory has been removed. </p> <h3> Regarding the documentation </h3> <p> The <a href="http://www.symfony-project.org/doc/1_1/" title="whole documentation">whole documentation</a> has been updated to reflect the changes between symfony 1.0 and this new release. The community has surpassed all our expectations by contributing translated resources in 10 new languages in less than 15 days! </p> <p> We have added a lot of useful tips in the <a href="http://www.symfony-project.org/cookbook/1_1/en/" title="cookbook">cookbook</a> and the fourth first chapters of the <a href="http://www.symfony-project.org/book/forms/1_1/en/" title="book to the new forms framework">book for the new forms framework</a> are available. The <a href="http://www.symfony-project.org/api/1_1/" title="API documentation">API documentation</a> can also helps you finding easily what you need in the whole symfony codebase. </p> <h3>Maintenance</h3><p>Symfony 1.1, as a transition release, will be maintained for one year starting from today, whereas 1.0 will still be supported until January 2010. </p> <h3>Next releases </h3><p> Fabien and the core team have already begun working on the future 1.2 milestone, which will be date driven and no more feature-driven. Also, release cycles will be drastically shorten. You can expect interesting features and improvements to come in this next release, beginning with the brand new admin generator based on the new forms system provided by symfony 1.1. More information on this topic are to come, so stay tuned but please enjoy this new 1.1 version first ;-) </p> <h3> Thanks </h3> <p> We would like to address a special big thanks to Fabian Lange, who has done a fantastic work on symfony recently. Also, kudos to Carl Vondrick and Dustin Whittle for their very appreciated work on symfony. </p> <p>And last but not least, the biggest thank will go to you, the symfony user community, for the growing interest in the project, for your <a title="contributions" href="http://trac.symfony-project.com/wiki/HowToContributeToSymfony">contributions</a> and for making symfony better and more widespread, day after day, so, one more time: <strong>thank you</strong>. </p>

29 Jun 2008 10:51pm GMT

A week of symfony #78 (23->29 june 2008)

<p>Unbelievable week for symfony: more than 200 changesets committed and 60 bugs fixed, great symfony 1.1 development activity, lots of symfony 1.0.x fixes, 3 new plugins released, nearly 20 plugins updated, 1.0.17 version released and lots of cookbook tutorials translations published.</p> <p><strong>Development mailing list</strong></p> <ul> <li>Discussions about <a href="http://groups.google.com/group/symfony-devs/browse_thread/thread/f414b617f7c99af4">sfForm and Iterator interface</a>, <a href="http://groups.google.com/group/symfony-devs/browse_thread/thread/d32fe71aeecbff1e">new Forms being default in symfony 1.1</a> and <a href="http://groups.google.com/group/symfony-devs/browse_thread/thread/a7a7c4e64b1c5e4f">planned changes in the admin generator</a></li> </ul> <p><strong>Development highlights</strong></p> <ul> <li><a href="http://trac.symfony-project.com/changeset/9755">r9755</a>, <a href="http://trac.symfony-project.com/changeset/9756">r9756</a>: [1.0, 1.1] fixed coding standard + typo</li> <li><a href="http://trac.symfony-project.com/changeset/9757">r9757</a>: [1.1] added truncate options to auto_link_text text helper</li> <li><a href="http://trac.symfony-project.com/changeset/9770">r9770</a>, <a href="http://trac.symfony-project.com/changeset/9771">r9771</a>: [1.0, 1.1] fixed possible notice in generator config handler</li> <li><a href="http://trac.symfony-project.com/changeset/9774">r9774</a>: [1.1] added extension depedencies to pear package</li> <li><a href="http://trac.symfony-project.com/changeset/9777">r9777</a>, <a href="http://trac.symfony-project.com/changeset/9784">r9784</a>: [1.0, 1.1] fixed autoload paths on windows</li> <li><a href="http://trac.symfony-project.com/changeset/9778">r9778</a>: [1.1] added support for highlighting multiple phrases in highlight_text</li> <li><a href="http://trac.symfony-project.com/changeset/9787">r9787</a>: [1.1] removed remaining 'noxsd' occurrences</li> <li><a href="http://trac.symfony-project.com/changeset/9789">r9789</a>: [1.1] re-added getCurrentRouteName to sfPatternRouting class</li> <li><a href="http://trac.symfony-project.com/changeset/9790">r9790</a>: [1.1] fixed PH_EOL in phpmailer for 1.1</li> <li><a href="http://trac.symfony-project.com/changeset/9793">r9793</a>: [1.1] fixed error reporting value for the test environment and added a migration task</li> <li><a href="http://trac.symfony-project.com/changeset/9802">r9802</a>: [1.1] fixed sfMemcacheCache ignores multi-memcache-server configuration and defaults to localhost</li> <li><a href="http://trac.symfony-project.com/changeset/9805">r9805</a>, <a href="http://trac.symfony-project.com/changeset/9806">r9806</a>: [1.0, 1.1] fixed i18n XLIFF do not handle entities correctly</li> <li><a href="http://trac.symfony-project.com/changeset/9829">r9829</a>, <a href="http://trac.symfony-project.com/changeset/9830">r9830</a>: [1.0, 1.1] backported encoding fix for MySQLiConnection from creole trac. fixes</li> <li><a href="http://trac.symfony-project.com/changeset/9832">r9832</a>, <a href="http://trac.symfony-project.com/changeset/9833">r9833</a>: [1.0] fixed issue with incorrect calculation of uri prefix (now using http_host)</li> <li><a href="http://trac.symfony-project.com/changeset/9834">r9834</a>: [1.1] sfWebRequest->isSecure now recognizes HTTP_SSL_HTTPS option correctly</li> <li><a href="http://trac.symfony-project.com/changeset/9835">r9835</a>: [1.1] added a sfValidatorTime that works for time types in schema.yml</li> <li><a href="http://trac.symfony-project.com/changeset/9846">r9846</a>, <a href="http://trac.symfony-project.com/changeset/9847">r9847</a>: [1.0, 1.1] added generation of a .zip file when creating a sandbox</li> <li><a href="http://trac.symfony-project.com/changeset/9853">r9853</a>: [1.1] fixed I18N timestamp handling</li> <li><a href="http://trac.symfony-project.com/changeset/9855">r9855</a>, <a href="http://trac.symfony-project.com/changeset/9857">r9857</a>: [1.0] fixed generated admin returning to first page regardless on which page the edit was started</li> <li><a href="http://trac.symfony-project.com/changeset/9856">r9856</a>, <a href="http://trac.symfony-project.com/changeset/9858">r9858</a>: [1.0, 1.1] removed double licenses from gettext files (with the permission of Qiang Xue)</li> <li><a href="http://trac.symfony-project.com/changeset/9859">r9859</a>: [1.1] fixed CRUD templates when using the --with-show option</li> <li><a href="http://trac.symfony-project.com/changeset/9860">r9860</a>: [1.1] fixed identifier name length check for Propel Generator</li> <li><a href="http://trac.symfony-project.com/changeset/9861">r9861</a>, <a href="http://trac.symfony-project.com/changeset/9862">r9862</a>: [1.0, 1.1] fixed getColumnFilterTag() component type</li> <li><a href="http://trac.symfony-project.com/changeset/9864">r9864</a>: [1.1] fixed problem with sfPropel class initialization</li> <li><a href="http://trac.symfony-project.com/changeset/9878">r9878</a>: [1.1] renamed sfForm::getFormField() to sfForm::getFormFieldSchema()</li> <li><a href="http://trac.symfony-project.com/changeset/9886">r9886</a>: [1.1] cleaned sfMessageSource_XLIFF</li> <li><a href="http://trac.symfony-project.com/changeset/9887">r9887</a>: [1.1] added a retry mechanism to sfMessageSource_XLIFF->save() that will recreate incorrect xml files</li> <li><a href="http://trac.symfony-project.com/changeset/9888">r9888</a>: [1.1] fixed Propel behavior registration when using functional tests or built-in tasks</li> <li><a href="http://trac.symfony-project.com/changeset/9890">r9890</a>: [1.1] fxed locking issues with the cache:clear, project:disable, project:enable and log:rotate tasks</li> <li><a href="http://trac.symfony-project.com/changeset/9893">r9893</a>: [1.0] fixed locking issues with the clear-cache, log-rotate, enable, and disable tasks</li> <li><a href="http://trac.symfony-project.com/changeset/9892">r9892</a>, <a href="http://trac.symfony-project.com/changeset/9894">r9894</a>: [1.0, 1.1] fixed PHPMailer issue with UTF-8 subject being wrapped in middle of utf-8 char</li> <li><a href="http://trac.symfony-project.com/changeset/9897">r9897</a>: [1.1] added a min and a max option for sfValidatorDate</li> <li><a href="http://trac.symfony-project.com/changeset/9906">r9906</a>: [1.1] fixed m2m propel data loading</li> <li><a href="http://trac.symfony-project.com/changeset/9922">r9922</a>: [1.1] fixed genurl() with relative_url_root parameter set</li> <li><a href="http://trac.symfony-project.com/changeset/9925">r9925</a>: [1.1] added the widget when calling the formatter for the sfWidgetDormSelectRadio widget</li> <li><a href="http://trac.symfony-project.com/changeset/9926">r9926</a>: [1.1] fixed addSortCriteria case sensitive problem</li> <li><a href="http://trac.symfony-project.com/changeset/9942">r9942</a>: [1.1] added sfSession::regenerate and added calls on authentication/credential change to protect against session fixation attacks</li> <li><a href="http://trac.symfony-project.com/changeset/9944">r9944</a>: [1.1] fixed sfForm::toString() silence exceptions</li> <li><a href="http://trac.symfony-project.com/changeset/9945">r9945</a>, <a href="http://trac.symfony-project.com/changeset/9947">r9947</a>: [1.1] fixed 404 page when raised by a non existant route</li> <li><a href="http://trac.symfony-project.com/changeset/9956">r9956</a>, <a href="http://trac.symfony-project.com/changeset/9957">r9957</a>: [1.0, 1.1] fixed convertUrlStringToParameters breaks urlencoded parameter</li> <li><a href="http://trac.symfony-project.com/changeset/9959">r9959</a>, <a href="http://trac.symfony-project.com/changeset/9960">r9960</a>: [1.0, 1.1] fixed gpc_magic_qutes and array in cookie</li> <li><a href="http://trac.symfony-project.com/changeset/9966">r9966</a>: [1.1] moved _convert_options() function to TagHelper as FormHelper is not always loaded (when sf_compat is off for example)</li> <li><a href="http://trac.symfony-project.com/changeset/9967">r9967</a>: [1.1] moved get_id_from_name() function to TagHelper as FormHelper is not always loaded (when sf_compat is off for example)</li> <li><a href="http://trac.symfony-project.com/changeset/9968">r9968</a>: [1.1] removed FormHelper dependency for JavaScript helpers</li> <li><a href="http://trac.symfony-project.com/changeset/9969">r9969</a>: [1.0] changed escaping of metas (and title) from htmlspecialchars to htmlentities to preserve intended encoding</li> <li><a href="http://trac.symfony-project.com/milestone/1.0.17">Completed Milestone 1.0.17</a></li> <li>Updated <a href="http://trac.symfony-project.com/trac/browser/branches/dwhittle">dwhittle</a> branch</li> <li><a href="http://trac.symfony-project.com/trac/timeline?from=06%2F29%2F2008&daysback=6&milestone=on&ticket=on&changeset=on&update=Update">...and many other changes</a></li> </ul> <p><strong>Development digest</strong>: 209 changesets, 49 defects created, 62 defects closed, 8 enhancements created, 20 enhancements closed, 4 documentation defects created, 10 documentation defects closed and 60 documentation edits.</p> <p><strong>Book and documentation</strong></p> <ul> <li>Created <a href="http://trac.symfony-project.com/wiki/Documentation/fr_FR/TinyMCE/TinyGeshi">TinyGeshi french</a> page</li> <li>Updated <a href="http://trac.symfony-project.com/wiki/HowToUpgradeToLatestBeta">How to upgrade your project</a>, <a href="http://trac.symfony-project.com/wiki/Presentations">Presentations about symfony</a>, <a href="http://trac.symfony-project.com/wiki/SymfonyAndVim">Coding symfony with Vim</a> pages</li> <li>Added spanish translation of the first chapter of forms book: <a href="http://www.symfony-project.org/book/forms/1_1/es/01-Form-Creation">Creación de formularios</a></li> <li>Added some french translations of cookbook tutorials: <a href="http://www.symfony-project.org/cookbook/1_1/fr/pager">Comment paginer une liste</a></li> <li>Added some japanese translations of cookbook tutorials: <a href="http://www.symfony-project.org/cookbook/1_0/ja/web_server">ウェブサーバーの設定をする方法</a>, <a href="http://www.symfony-project.org/cookbook/1_0/ja/web_server_iis">IIS上でsymfonyをインストールする</a></li> <li>Added some hungarian translations of cookbook tutorials: <a href="http://www.symfony-project.org/cookbook/1_1/hu/web_server">Hogyan állítsuk be a web szervert (Apache)</a>, <a href="http://www.symfony-project.org/cookbook/1_1/hu/propel_13">Propel 1.3 használata symfony 1.1 alatt</a>, <a href="http://www.symfony-project.org/cookbook/1_1/hu/directory_structure">Hogyan szabjuk testre az alapértelmezett könyvtárstruktúrát</a></li> <li>Added portuguese translation of cookbook tutorials: <a href="http://www.symfony-project.org/cookbook/1_1/pt/alternative_schema">Como escrever um schema do Propel com a sintaxe alternativa</a></li> </ul> <p><strong>Wiki</strong></p> <ul> <li>New <a href="http://trac.symfony-project.com/trac/wiki/DevelopersForHire">developers for hire</a>: <ul> <li>Ross Motley (ross.motley [at] gmail.com): axperienced application developer based in London UK. 7 years web development experience with a particular emphasis on creating agile enterprise systems as well as the usual ecommerce/CMS projects.</li> <li><a href="http://www.artform.nl">Artform Webdevelopment</a>: Dutch company based in Boekel, the Netherlands. We offer a full range of specialties, from SEO consulting to design and implementation of small and large scale web applications. We have extensive knowledge of PHP and Symfony.</li> <li>Michael Bodnarchuk (davert [at] mydixi.com): experienced web developer with strong knowledge of PHP5, MySQL, and Symfony. Lead developer of myDixi social networking platform. Always avaible for hire as a freelancer developer for symfony-based sites. Located in Kiev, Ukraine.</li> <li>Aaron Hall (adhall [at] gmail.com): US-based web developer with 4 years professional experience, PHP/MySQL application development expertise, a diverse skillset and several Symfony-based applications in production.</li> </ul> </li> <li>New <a href="http://trac.symfony-project.com/trac/wiki/SymfonyBloggers">symfony blogger</a>: <ul> <li>SymfonyNerds (<a href="http://www.symfonynerds.com">website</a>, <a href="http://feeds.feedburner.com/symfony">feed</a>)</li> <li>Matthew Bull (<a href="http://www.matthewbull.net/tag/symfony/">website</a>, <a href="http://www.matthewbull.net/tag/symfony/feed/">feed</a>)</li> </ul> </li> </ul> <p><strong>Plugins</strong></p> <ul> <li><strong>New plugins</strong> <ul> <li><a href="http://trac.symfony-project.com/wiki/isicsBreadcrumbsPlugin">isicsBreadcrumbsPlugin</a>: another plugin for handling breadcrumbs</li> <li><a href="http://trac.symfony-project.com/wiki/sfCaptchaGDPlugin">sfCaptchaGDPlugin</a>: create captchas using GD library</li> <li><a href="http://trac.symfony-project.com/wiki/sfSWFUploadPlugin">sfSWFUploadPlugin</a>: offers helpers for simple use and configuration of SWFUpload, a multi upload system in flash and javascript</li> </ul> </li> <li><strong>Updated plugins</strong> <ul> <li><a href="http://trac.symfony-project.com/wiki/sfExtjsThemePlugin">sfExtjsThemePlugin</a>: restored related drop-down combo-boxes, restored autocompletion and sorting for related-comboboxes, start of splitting out combobox from foreignFieldColumn, added editable check for comboboxes, resolved some issues where unncessary renderer and editor parameters were being set to foreignkeycolums that were editable, fix for hidden related columns, fix scope of combo-autoload, added relatedFieldName property, fixed some editor-popup-window properties, changed _edit_ajax_form method-definitions, added setting of namespace to addSortCriteria and processSort to fix the sorting problem with executeJsonAutocomplete, reimplemented related-combos (changed prevent changing focus, to allow adding new relted items from pop-up, changed renderers, improved preloading to combo-store), reimplemented edit-pages, moved combo-store definition from foreignFieldColumn to comboBoxAutoLoad.js, corrected the naming and namespaces on some files and overrides, added Ext.ux.form.Checkbox back into default config as it makes checkboxes much nicer, changed implementation for tinyMCE + new plugin, implemented fieldset, added symfony-ajax-debugger integration</li> <li><a href="http://trac.symfony-project.com/wiki/sfPropelPlugin">sfPropelPlugin</a>: fixed admin_double_list cannot handle objects of the same class, fixed include path for behaviors, added mixins for doCount in doCountJoin, fixed path to base class in forms, added support for propel 1.3 nested sets, fixed tests, updated fixtures settings, fixed m2m fixtures, fixed sort criteria case sensitivity, fixed sfPhing for phing 2.3</li> <li><a href="http://trac.symfony-project.com/wiki/sfGuardPlugin">sfGuardPlugin</a>: fixed remember me functionality</li> <li><a href="http://trac.symfony-project.com/wiki/dgDojoPlugin">dgDojoPlugin</a>: updated documentation</li> <li><a href="http://trac.symfony-project.com/wiki/sfAssetsLibraryPlugin">sfAssetsLibraryPlugin</a>: improved Windows compatibility, fixed wrong exception parameter, fixed untranslated exception messages</li> <li><a href="http://trac.symfony-project.com/wiki/sfFeed2Plugin">sfFeed2Plugin</a>: added Image support to sfFeed2Plugin</li> <li><a href="http://trac.symfony-project.com/wiki/sfXssSafePlugin">sfXssSafePlugin</a>: migrated to htmlpurifier 3.1.1, released 0.6.1 version</li> <li><a href="http://trac.symfony-project.com/wiki/sfPropelPlanetPlugin">sfPropelPlanetPlugin</a>: added a new author column in entry schema, updated according templates (breaks BC), added strict requirements to bundled routes, added CDATA clauses in RSS tags to avoid problems with entities, added simple css theme settings, added the planet:feed-purge task to purge entries older than a given date or amount of time</li> <li><a href="http://trac.symfony-project.com/wiki/sfDoctrinePlugin">sfDoctrinePlugin</a>: locked Doctrine externals to a tag</li> <li><a href="http://trac.symfony-project.com/wiki/sfPropelSlotBehaviorPlugin">sfPropelSlotBehaviorPlugin</a>: released 0.1.4 version</li> <li><a href="http://trac.symfony-project.com/wiki/sfExtjs2Plugin">sfExtjs2Plugin</a>: added quote except for scope key, fixed recursion error for items-surrouding (they where not surrounded with [] but with {})</li> <li><a href="http://trac.symfony-project.com/wiki/sfDynamicCMSPlugin">sfDynamicCMSPlugin</a>: fix bug with requirements & i18n activated for routing.yml generation</li> <li><a href="http://trac.symfony-project.com/wiki/sfPropelImpersonatorPlugin">sfPropelImpersonatorPlugin</a>: backported trunk patch on 1.0 stable branch</li> <li><a href="http://trac.symfony-project.com/wiki/sfPropelFinderPlugin">sfPropelFinderPlugin</a>: added sfPropelFinder::withColumn() method, withColumn() automatically adds missing joins, added sfPropelFinder::findFirst() and sfPropelFinder::findLast() methods, added sfPropelFinder::relatedTo() method, made findLast() accept a column parameter, added sfPropelFinder::findByXXX() and sfPropelFinder::findOneByXXX() methods, sfPropelFinder::from() now accepts an array of Propel objects</li> <li><a href="http://trac.symfony-project.com/wiki/sfGuardDoctrinePlugin">sfGuardDoctrinePlugin</a>: use trunk/ instead of 1.1-branch with sf 1.1, since 1.1-branch doesn't work with sf 1.1</li> <li><a href="http://trac.symfony-project.com/wiki/sfPhotoGalleryPlugin">sfPhotoGalleryPlugin</a>: released 0.1.3 and 0.1.4 versions</li> <li><a href="http://trac.symfony-project.com/wiki/sfAdvancedAdminGeneratorPlugin">sfAdvancedAdminGeneratorPlugin</a>: added one-to-many foreign_class auto setting feature (nesting, rest), added conditions to object_actions tag</li> <li><a href="http://trac.symfony-project.com/wiki/sfPropelActAsSluggableBehaviorPlugin">sfPropelActAsSluggableBehaviorPlugin</a>: merged all changes and added the "unique" parameter, released 0.4 version</li> <li><a href="http://trac.symfony-project.com/wiki/sfLucenePlugin">sfLucenePlugin</a>: fixed better routing, fixed readme to explain how to enable propel behaviors</li> </ul> </li> </ul> <p><strong>Some new symfony powered websites</strong></p> <ul> <li><a href="http://www.meioalternativo.com.br/">MeioAlternativo</a>: (portuguese) great source of proxys, tips, utilities and list os msn web messengers, a lot of stuff to help people by-pass firewalls on job and school</li> </ul> <p><strong>They talked about us</strong></p> <ul> <li><a href="http://geekblog.over-blog.com/article-20668457.html">Symfony : envoyer un mail en cas d'erreur</a></li> <li><a href="http://blog.ronnyristau.de/2008/06/23/symfony-11-doctrine-cookbook/">Symfony 1.1 - Doctrine Cookbook</a></li> <li><a href="http://www.symfonybr.com/2008/06/20/gerenciando-aplicacoes-em-producao-profiling-production/">Gerenciando aplicações em produção (Profiling production)</a></li> <li><a href="http://www.symfony.vn/blog/news/get-video-phien-ban-moi/">Get Video phiên bản mới</a></li> <li><a href="http://blog.ronnyristau.de/2008/06/23/symfony-11-release-fur-diese-woche-angekundigt/">Symfony 1.1 Release für diese Woche angekündigt</a></li> <li><a href="http://prendreuncafe.com/blog/post/2008/06/24/ESC_RAWquerie">ESC_RAWquerie</a></li> <li><a href="http://leonardo.mipopayan.com/2008/06/mi-primer-post.html">Mi primer post !</a></li> <li><a href="http://symfonynerds.com/blog/?p=11">Random Symfony Tip of the Day : Updating your Model</a></li> <li><a href="http://symfonynerds.com/blog/?p=12">Symfony Pagination made easy with the sfPropelPager</a></li> <li><a href="http://symfonynerds.com/blog/?p=13">Random Symfony Tip: 'fillin' with Multiple forms</a></li> <li><a href="http://prendreuncafe.com/blog/post/2008/06/25/poste-developpeur-php-symfony-paris">Symfotaf</a></li> <li><a href="http://redotheweb.com/2008/06/26/finding-augmented-propel-objects/">Finding "Augmented" Propel Objects</a></li> <li><a href="http://www.sda-india.com/sda_india/psecom,id,22,site_layout,sdaindia,news,23588,p,0.html">Get to Know the Symfony 1.1 Architecture Before Its Release</a></li> <li><a href="http://symfonynerds.com/blog/?p=14">Export to Excel with Symfony</a></li> <li><a href="http://symfonynerds.com/blog/?p=15">Symfony-project links on FriendFeed</a></li> <li><a href="http://www.symfony.vn/blog/guide/bash-complete-voi-symfony/">bash completion với symfony</a></li> <li><a href="http://redotheweb.com/2008/06/27/a-finder-smarter-than-propel-getters/">A Finder Smarter Than Propel Getters</a></li> <li><a href="http://www.symfony.es/2008/06/27/la-nueva-arquitectura-de-symfony-11/">La nueva arquitectura de Symfony 1.1</a></li> <li><a href="http://www.symfony-framework.com/2008/06/27/sfswfupload-plugin-for-symfony/">sfSWFUpload Plugin for Symfony</a></li> <li><a href="http://www.symfonybr.com/2008/06/27/as-20-funcoes-mais-utilizadas-no-symfony/">As 20 funções mais utilizadas no Symfony</a></li> <li><a href="http://www.tech-recipes.com/rx/2919/symfony_rebuild_from_schema_yml_without_loss_of_data">Symfony: Rebuild from Schema.yml Without Loss of Data</a></li> <li><a href="http://www.matthewbull.net/2008/06/29/symfonys-sfguard-plugin-and-ldap/">symfony's sfGuard plugin and LDAP</a></li> <li><a href="http://blog.ronnyristau.de/2008/06/29/symfony-11-release-morgen/">Symfony 1.1 Release - morgen?</a></li> </ul>

29 Jun 2008 8:10pm GMT

symfony 1.0.17 is out

The symfony team is proud to announce the immediate availability of symfony 1.0.17. Lot of bugfixes in this release and more than 20 tickets closed. * r9969: changed escaping of metas (and title) from htmlspecialchars to htmlentities to preserve intended encoding. fixes #2860. * r9959: fixed gpc_magic_qutes and array in cookie (closes #3458). * r9957: fixed convertUrlStringToParameters breaks urlencoded parameter (closes #3788). * r9892: fixed PHPMailer issue with UTF-8 subject being wrapped in middle of utf-8 char. fixes #2957. * r9861: fixed getColumnFilterTag() component type (closes #2861). * r9855: fixed generated admin returning to first page regardless on which page the edit was started. fixes #1280. * r9829: backported encoding fix for MySQLiConnection from creole trac. fixes #3017. * r9806: fixed i18n XLIFF do not handle entities correctly (closes #3792). * r9784: fixed autoload paths on windows (closes #1485). * r9668: fixed sfBrowser does not create DOMDocument when response is text/xml (closes #3766). * r9538: fixed sfFillInForm to work correctly with nested arrays like: article[description][]. * r9260: fixed cache corruption in the production environment for admin generated content. * r9216: fillin: fixed bug with html documents having extra attributes in head tag. * r9209: added third mode for fillin xhtml, same as xml but without prolog (+test). fixes #3568. * r9182: fixed phpmailer EOL line style using now PHP_EOL constant. fixes #3313 #3562. * r9177: 1.0: backported fix from r8926. fixes #2161. As usual, the PEAR and Debian packages are going to be available very soon. As symfony 1.1 will be released soon, we will have 2 stable versions available in the PEAR repository. So, to install the latest 1.0 version with PEAR, you must specify the full version as show below: $ pear install symfony/symfony-1.0.17 or when upgrading: $ pear upgrade symfony/symfony-1.0.17 We've updated the [installation page](http://www.symfony-project.org/installation/1_0) to reflect these changes.

29 Jun 2008 7:21pm GMT

feedcakebaker

Thinking about the pagination feature

Recently, I was asked by yunhaihuang some questions about advanced pagination stuff I couldn't answer satisfactorily… And that's when I realized that the current implementation of the pagination feature of CakePHP contains at least one conceptual flaw (in most pagination scenarios you probably won't notice this flaw). Let's have a look at pagination at the model [...]

29 Jun 2008 1:47pm GMT

26 Jun 2008

feedCI News

CodeIgniter 1.6.3 Maintenance and Security Release

We are happy to release CodeIgniter version 1.6.3 today. Version 1.6.3 is primarily a maintenance release, with a variety of bug fixes and some refinement to existing features (with a few new ones tossed in for good measure). Details of course can be found in the Change Log.

Additionally, with the assistance of an outstanding community member, Pascal Kriete (Inparo), we have identified and eliminated a potential cross-site scripting vulnerability. No known sites have been affected, but as we take security very seriously, we felt it warranted a feature-light point release to help users protect their sites. We cannot thank Pascal enough for the manner in which he reported this issue to us, and then continuing to diligently work with us to make sure the vulnerability was plugged. If you're looking for a fresh set of eyes to do a security audit on your app, he comes highly recommended by the EllisLab staff.

Command line addicts: don't forget that starting with version 1.6.1, the CodeIgniter subversion contains tagged releases!

26 Jun 2008 11:52pm GMT

23 Jun 2008

feedcakebaker

Skipping test cases

Some days ago Tim Koschützki showed in an article how you can execute only some specific test methods in (SimpleTest-based) unit tests by overriding the getTests() method. Sometimes you not only want to skip some test methods but an entire test case. For example, the tests of the MySQL datasource test case can only be executed [...]

23 Jun 2008 3:19pm GMT

feedzend framework

Zend_Acl and MVC Integration Part I (Basic Use)

So, what is wrong with Zend_Acl and the current MVC implementation in the Zend Framework? there is nothing wrong, it is just that it gets not too obvious for developers how to achieve an optimal integration between these two important parts of the framework.



23 Jun 2008 2:02pm GMT

feedsymfony Project Blog

The symfony 1.1 architecture

The symfony 1.1 architecture ============================ Before we release symfony 1.1 later this week, I want to give some information about the new symfony 1.1 architecture. Apart from the [new](http://www.symfony-project.org/blog/2008/06/18/the-symfony-forms-in-action-book-is-online) [exciting](http://www.symfony-project.org/blog/2008/06/09/how-to-create-an-optimized-version-of-your-website-for-the-iphone-in-symfony-1-1) [features](http://www.symfony-project.org/blog/2008/06/14/batches-are-dead-long-life-to-tasks) we have in symfony 1.1, this version also represents a year of hard work to refactor the internals. Let's dig into symfony internals a bit! The symfony platform -------------------- symfony 1.1 is based on a set of cohesive but decoupled classes, the **symfony platform**: ![The symfony platform](/uploads/assets/architecture/platform.png) Each class in the symfony platform is useable without the whole MVC architecture. The symfony platform classes have no dependency, and the only prerequisite to use them is the registration of the symfony autoloader: [php] require_once '/path/to/sfCoreAutoload.class.php'; sfCoreAutoload::register(); With just two lines of code, you can use any of the symfony platform classes. For example, if one of your projects does not use symfony, you can still use the `sfYaml` class by including the symfony autoloader: [php] require_once '/path/to/sfCoreAutoload.class.php'; sfCoreAutoload::register(); // load some YAML file or string $config = sfYaml::load('/path/to/a/file.yml'); $config = sfYaml::load(<<<EOF config: key: value foo: [bar, foobar] bar: { bar: foo } EOF); // dump some array to YAML $yaml = sfYaml::dump($config); The same goes for all classes, like the `sfCache` classes: [php] require_once '/path/to/sfCoreAutoload.class.php'; sfCoreAutoload::register(); $cache = new sfSQLiteCache(array('database' => dirname(__FILE__).'/cache.db')); $cache->set('foo', 'bar'); $value = $cache->get('foo'); This example uses the `SQLite` backend but symfony also provides backends based on `File`, `APC`, `XCache`, `EACcelerator`, and `Memcache`. Even if it seems natural to use those classes independently, the symfony platform goes one step further with classes like `sfRequest` or `sfResponse`. Let's see an example where we use these two classes to create a simple 'Hello World' script: [php] require_once '/path/to/sfCoreAutoload.class.php'; sfCoreAutoload::register(); $dispatcher = new sfEventDispatcher(); $request = new sfWebRequest($dispatcher); $response = new sfWebResponse($dispatcher); $content = 'Hello '.$request->getParameter('name', 'World'); $response->setContent($content); $response->send(); In this example, we use a `sfEventDispatcher` object. Even if the platform classes are totally decoupled, some classes can communicate together thanks to the dispatcher. The dispatcher provides a mean to notify events and to listen to these events. You do not need to implement an interface to create a listener, nor use any specific base class to create an event; an event is only defined by its name and by the array of parameters sent by the notifier. For example, the `sfPatternRouting` class listens to the `request.filter_parameters` event: [php] $callback = array($this, 'filterParameters'); $dispatcher->connect('request.filter_parameters', $callback); And when a request is created, the `sfWebRequest` notifies the `request.filter_parameters` event: [php] $event = new sfEvent($this, 'request.filter_parameters'); $parameters = $dispatcher->filter($event, $parameters); So, even if the `sfWebRequest` class and the `sfPatternRouting` class are decoupled, they automagically communicate together when they share the same dispatcher. To illustrate this feature, let's change the previous example a bit by adding a routing object that connects the `/hello/:name` pattern to the 'Hello World' application: [php] require_once '/path/to/sfCoreAutoload.class.php'; sfCoreAutoload::register(); $dispatcher = new sfEventDispatcher(); $routing = new sfPatternRouting($dispatcher); $routing->connect('hello', '/hello/:name'); $request = new sfWebRequest($dispatcher); $response = new sfWebResponse($dispatcher); $content = 'Hello '.$request->getParameter('name', 'World'); $response->setContent($content); $response->send(); Now, if you save this script as `index.php` under the web root directory, you can access the application by typing something like `/index.php/hello/Fabien` in your browser. This is great if you want to leverage some of the cool features symfony provides, without using the whole MVC architecture. This is also a great way to migrate your old applications to symfony. Instead of rewriting your applications from scratch, you can introduce symfony concepts one at a time. You can also create your very own framework on top of the symfony platform. You do not need to reinvent the wheel, the symfony platform has all you need to create a great framework: * `sfRequest`/`sfRouting`: The request * `sfUser`/`sfStorage`: The user/session * `sfForm`: The form framework * `sfCache`: The cache framework * `sfOutputEscaper`: The XSS protection layer * `sfResponse`: The response * ... Of course, the **symfony framework** itself is powered by the **symfony platform**: ![The symfony MVC framework](/uploads/assets/architecture/mvc.png) The `sfConfiguration` class provides a way to configure and to customize your applications. The `sfContext` class acts as a registry that holds references to all core objects. And thanks to the `factories.yml` configuration file, you can customize all the registry classes very easily, just by editing a YAML file. The **symfony MVC framework** is provided by a set of additional classes on top of the **symfony framework** as shown below: ![The symfony MVC framework](/uploads/assets/architecture/framework.png) The *Model layer* is provided by third-party libraries, Propel or Doctrine. Even if symfony 1.1 is bundled with the Propel plugin, it's very easy to switch to Doctrine by installing the `sfDoctrinePlugin`. Both ORMs provide the same level of integration with symfony. The *View layer* is provided by the `sfView` class, a bunch of helpers, and templates written by the developer. The *Controller layer* is based on a filter chain and actions defined by the developer. As of version 1.1, symfony is one of the most decoupled framework available in PHP, even more than the Zend Framework. For example, the `sfForm` framework is useable without any of the MVC classes whereas `Zend_Form` is somewhat tied to the controller and the view layers.

23 Jun 2008 1:57pm GMT

22 Jun 2008

feedsymfony Project Blog

A week of symfony #77 (16->22 june 2008)

<p>Symfony continue expanding and improving its documentation. During this week, several new cookbook tutorials were added and lots of translations were published thanks to the contribution of the symfony community. In addition, the first four chapters of the new symfony 1.1 forms book were published.</p> <p><strong>Development highlights</strong></p> <ul> <li><a href="http://trac.symfony-project.com/changeset/9609">r9609</a>: [1.1] fixed sfPropelDatabaseSchema related class and task trying to generate a schema from an empty YAML schema definition (this can occur when you have no schema.yml for a whole project but use ones from plugins)</li> <li><a href="http://trac.symfony-project.com/changeset/9618">r9618</a>: [1.1] fixed possible notice</li> <li><a href="http://trac.symfony-project.com/changeset/9636">r9636</a>: [1.1] fixed phpdoc for sfCoreAutoload</li> <li><a href="http://trac.symfony-project.com/changeset/9652">r9652</a>: [1.1] added the ability to set the style used when calling the logSection method in task classes (backward compatible)</li> <li><a href="http://trac.symfony-project.com/changeset/9662">r9662</a>: [1.1] made mysql timestamp more robust</li> <li><a href="http://trac.symfony-project.com/changeset/9663">r9663</a>: [1.1] fixed sfCreoleSessionStorage</li> <li><a href="http://trac.symfony-project.com/changeset/9664">r9664</a>: [1.1] fixed problem for unit tests</li> <li><a href="http://trac.symfony-project.com/changeset/9665">r9665</a>: [1.1] fixed unique columns method in Peer classes when several unique indexes exist f