Zend Framework, Propel, jQuery
This is long overdue. I have been considering this post for quite some time but have been so wrapped up in development that I just haven’t taken the time to get it done.
Recently I was confronted with some difficult development decisions. It was time to totally redo a project that was getting… well, stale. The original code base was my first stab with PHP 5 object oriented goodness. I rolled my own classes and peers using a php script that connected to the mysql databases (2). There was no MVC framework involved. I used multiple PEAR classes including HTML_AJAX and MDB2.
The new project would need to accomplish the same things as the old… Only in a way that was more modular and easier-to-manage.
I started by analyzing different PHP frameworks. I spent at least 3 full days with each framework. In each case I followed tutorials and eventually attempted to build a simple site that would resemble my scenario.
Frameworks

Eventually I decided that Zend Framework was best for me. First, I am a fan of Zend. I like their products and think they deliver on their committments. Having the framework backed by a company helps as well. Second, I liked how I could as much or little of the framework as I wanted. Third, it just made sense to me.
I actually liked symfony quite a bit, but got frustrated when working with components… as I was getting some unusual results. CakePHP didn’t really appeal to me at all since it was based on PHP 4.
Unlike the other frameworks, Zend does not really come with the full blown ‘model’. I looked at 2.
ORMs

Both of these products are fantastic. I personally think that PHPDoctrine is the way of the future. At the time of my review they were at 0.10 release… so obviously not ready for production use at this point. Once it is stable, it could become the preferred ORM. For now however it is Propel. Propel is stable and has been in use for some time (1.3 beta is what I am using). I appreciate that fact that I can just use
$user = UserPeer::retrieveByPk(1);
instead of what propel requires
$user = $conn->getTable('User')->find(1);
Two problems for me in the above. First, I am dealing with 2 connections that are both being used simultaneously on every page (global and local). I dislike having to have a $conn around to make calls on… let alone make sure it is the right one. Second, I prefer the shorter static calls available with propel.
Also, I like the documentation for Propel better… it is actually much shorter and to the point. Again, like Zend Framework, it just made sense to me.

Last but not least I chose to use jQuery to replace HTML_AJAX and scriptaculous. Thus far I am very impressed with it and the many plugins that are available. Again, the documentation is great as well.
The great thing is that there are quality options to choose from. Each of the above mentioned products are great for different projects. I simply appreciate all the hard work that goes into all of them…
I will be posting some follow-ups on my specific usage of the above.