There are many PHP frameworks out there, but 2 of my personal favorites are Drupal and CakePHP. WordPress is another popular in the world, and I have done many projects with it. I will say that WordPress has great documentation and a clean API, but it is rather limited in its capabilties. CakePHP and Drupal have proven to be flexible, scalable, and perfect for certain uses. The bottom line in this debate is that both are great, and both serve their purposes. Between CakePHP and Drupal, I feel a project of any size can be accomplished.
CakePHP 2.3
Pros:
- Ease of maintenance - The application is cleanly laid out and it is easy to find and modify any piece of the application.
- Separation of logic and presentation layer (MVC Model View Controller) - Perfect for separating work between a front end and back end developer.
- Console - Nice console tools and you can even create command line applications that don't have a web interface.
- More control over code
- Clean HTML - output exactly what you want without the extra bloat
Cons:
- More work involved the first time around
- Generally involves more hand coding
- Less community plugins
- No built in admin interface - unlike Drupals cumbersome UI, CakePHP requires you to build your own management interface.
- No blocks/theme system - With the latest dev version of CakePHP 2.3 there is a basic block system in place. It is not as powerful as Drupal's region/block system, but it has the potential. Themes are also a new implementation to CakePHP 2.3 but they are in the very basic stages.
Drupal 7
Pros:
- Hooks - You can hook
- Available modules - The community is absolutely huge
- Quick prototypes - Easily build a new install using profiles and existing modules to get started quickly
- Front end admin tools - Manage content and settings through the admin panels
- Block system - This was a great advantage over CakePHP, but the newest versions of CakePHP are starting to implement this
Cons:
- Bloated - Core comes with components most people do not consider 'core' like polls, blogs, or forums. HTML Markup has a lot of unneccessary clutter.
- Blending of Logic and Presentation layer - This can make it difficult to track down where an element is being output(is it a block, a view, coming from module code, a template file, javascript?) It also can be troublesome when worker with a front end developer and a back end developer separately. If the front end developer does not know Drupal or PHP, then progress is slower since the back end developer needs to spend more time communicating and working with the front end developer.
Final thoughts
Both CakePHP and Drupal are powerful frameworks. For quick prototypes, or projects that can mostly use 'out-of-the-box' modules, Drupal makes a lot of sense. In applications where performance and control are important, CakePHP takes the cake. CakePHP lets you build a custom application from the ground up, offering some helpful tools. Drupal gives you more than you need, and you have to trim the fat, or customize(override) existing features to get it to do what you want. Each project has its own needs, and they must be evaluated before determining which framework best suits the purpose.