views:

22637

answers:

86

Over the course of your web development experience, what PHP framework(s) have you worked with? What strengths and weaknesses have you observed in those frameworks? Considering these, what framework would you recommend if beginning a new application?

+9  A: 

CakePHP if we are going to make anything more than a simple website. It's MVC architecture alone makes it a good choice.

Zend is a good second option because all the built-in libraries.

Vaibhav
+6  A: 

I think it depends on the kind of application you want to produce... As far as I am concerned, I prefer to deal with low level api such as TinyButStrong template engine.

Does anyone knows a place where frameworks are compared and where their weaknesses are detailed?

TiTi
http://www.phpwact.org/php/mvc_frameworks
PhiLho
+41  A: 

Well, we've been using Zend Framework on a private project for a few months, and it's been pretty painful. We also use it at work, and it's pretty painful there too. It's one to consider if you're starting on a project, but it's not stable and probably won't be for some time to come. I think Zend have managed it pretty badly; at one crucial point the docs were version 1.5 but the current version was still 1.0 and I wasted a lot of time trying to get it to do what it said it did in the docs.

The MVC is implemented in an OK fashion, but the absence of good tutorials was a terrible drawback when we were learning it back in Spring 2008. I believe most of any application should be in the model, and in ZF at the time this was given no coverage whatsoever.

I think it will need another year to be stable enough to live with, and I think it will probably become something of a standard once they've gotten it a bit more mature. Although it's from Zend, it's very much an ad-hoc community project with not enough centralised control, as far as I can see. And for the last year or so I'd say it's suffered as a result. I really wish we hadn't used it on the private project. At work, it's more of a long term thing and so it will probably pay off eventually.

The good thing about ZF is that you don't need to use the whole thing - for instance, you can start using the RSS functions or any other module with an existing application perfectly happily. You can use the MVC stuff or not. That flexibility is very valuable. The question is again whether the quality of the individual bits is there yet; my colleague really struggled with their ACL architecture, for example, but the RSS stuff is fine.

I've been pretty impressed with what I've seen of CakePHP, but haven't used it. I would probably give it a go on a new project; it's based on similar principles to Rails and has some nice design principles.

Flubba
I'm pretty impressed that you did not manage to find any good tutorials. There are tons and tons.
Till
Having used only CakePHP (so grains of salt are there-> *), the MVC formulation is opposite to yours, and close to what you mention you found: the application logic is in the controllers, and the Models just link them to the database.
Adriano Varoli Piazza
@Till "There are tons and tons" Feel free to link to them! This was back in January-March 2008
Flubba
Zend Framework Quickstart: http://framework.zend.com/docs/quickstartZend Framework Tutorial: http://akrabat.com/zend-framework-tutorial/Build your own Blog in Zend: http://blog.astrumfutura.com/archives/351-An-Example-Zend-Framework-Blog-Application-Part-1-Introductory-Planning.html
John Fiala
I agree that ZF does give the best out of all PHP frameworks; however, in case of inexperienced (as in not experienced in php frameworks or other web development frameworks) developer, I would suggest CakePHP because it is easier to start and grasp the core concepts.
bLee
I don't know if cakephp is a good choose yet, because the creator of PHP(rasmsus) did some benchmarks on cakephp a while back and it was slow as a snail back then). Codeigniter was pretty fast.
Alfred
Although there's a steep learning curve, ZF has standardised so much functionality it's well worth diving in. Once you get over the hump, deployment is at lightspeed http://www.sisnetti.com.br/index.php/Zend-Framework/Quick-Start-English/ http://www.slideshare.net/ZendCon/zendtool-practical-use-and-extending http://devzone.zend.com/tag/ZendCon%20Sessions
Andy
I'm an avid Zend Framework user both for work and personal projects. I like the framwork, but I agree that the tutorials are really lacking and that the framework changes so fast, that the tutorials are usually out of date. ZendCasts has done the best job of explaining Zend in my experience.The loosely coupling of the objects makes Zend more powerful than a lot of other frameworks in my mind. I would say it's not a framework for beginners, unless it's setup and explained by someone with experience.
AndreLiem
Zend have just rewritten their docs, and provided a tutorials area http://framework.zend.com/manual/1.10/en/learning.html - another good intro here http://www.slideshare.net/bradley.holt/zend-framework-introduction
Andy
I vote for Zend Framework, no doubt about it. I had experience with CodeIgniter and Kohana to. Im using Kohana for small projects. For everithing else Zend. The only thing is as mentioned .. the documentation, is absolute lobotomy, but it is worth of effort to learn it.
Dr Casper Black
I tried picking up Zend. As a newer programmer I found the documentation as bad as others mentioned. Totally painful and non-functional...you can read 5 different Zend Framework introductions and find get 6 different initial configuration suggestions. I abandoned it for the time being and might pick it up again as the framework looks very robust, but the learning curve and initial documentation is treacherous.
dscher
The reason why there is a bunch of different configuration suggestions is because there is a bunch of different configurations that can be had. Which IMHO makes ZF the best. They don't force you to do it one way. The result of this is that you are forced to learn what is going on and it's not just "magic" - like some of the others.
sims
A: 

My best experience comes from using Akelos. Until PHP 5.3/6, the lack of late static binding makes PHP frameworks a little frail, but Akelos manages to actually be a lot more OO than most. It also has a nice view syntax (sintags).

Karl Seguin
why lack of late static binding makes PHP frameworks a little frail?i do not even understand why we need late static binding, why people need to make static method behave likes a "Object's method"?
anru
+20  A: 

Zend Framework is my choice for MVC-based applications. It doesn't force you to use any specific setup for your application but gives you guidelines that are easy to work with. Zend Framework also is an 'at-will' framework so if you don't want to use everything you don't have to.

I did a full write-up here on why I really enjoy using it.

dragonmantank
+46  A: 

CakePHP has been my top choice for a while now. It's very simple to get started with, and allows for rapid development, following a similar model to Ruby on Rails.

bcwood
yup. RoR developers love CakePHP :)
bLee
Cakephp Rocks :D
Harsha M V
Yup cakephp is probabaly the best unless you have a high traffic application but there too you can optimize the framework
Web Developer
+54  A: 

I have used Code Igniter and it is a very slick and lean MVC framework. It is definitely a great option if you are building a custom application. Basically most of the plumbing and redundant work is ready for you to use, and you can concentrate on the look and feel along with the business logic. It does have a bit of a learning curve (similar to CakePHP), however.

You might want to first quickly test out Drupal, or Joomla (among others) that offer a fully setup and ready with little customization IF they have what you need. These giant frameworks are tough to customize, and they are mainly setup for Content Management applications.

Steve Tranby
I would argue codeigniter has far less of a learning curve than most other PHP frameworks I tried - it didn't enforce much on you, once you get over the URL -> a class, then a function named "index", it's quite simple, and more "PHPy" than I found other frameworks (that tried to be Ruby on Rails)
dbr
You make a good point, however the learning curve I was speaking of is in reference to learning how to make the framework do as you need. I agree that it is not that difficult, and I think the MVC style url mapping is going to be the future of web apps and services. So it's something good to learn.
Steve Tranby
You can also look at Kohana, a rebuild of CI. It manages some things slight different to CI.
Ikke
Codeigniter's documentation is top notch. It makes learning and building with CI a joy.
Cory House
About Drupal as a PHP framework: it's very heavy on the server and I would not suggest it unless you are planning to use it's large module library in some way. Interesting enough, first drafts for Drupal 8 state that some energy will be dedicated to separate between "Drupal the framework" and "Drupal the CMS"... it might be worth keeping an eye on it.
mac
+1 for CI, quick learning curve, excellent documentation, active community.
Iraklis
+16  A: 

I've used Zend Framework with much success over the last 6 months, I have only worked with the 1.5.* line, so I haven't experienced any of the negatives brought up by @Flubba. I enjoy using Zend for several reasons:

  1. MVC right out of the box, create the document structure and the bootstrap file and you're pretty much good to go.

  2. A very robust library, a whole slew of classes have been created to provide an OO interface for most of the commonly used functions in PHP.

  3. Why use Zend Framework?

jakemcgraw
jakemcgraw, how do you implement page navigation within the Zend Framework? Like a classic horizontal nav (Home - Stuff - About) where the current page is highlighted (like class="active" added to it, for example). How does ZF handle such a common display element?
gaoshan88
@gaoshan88 Checkout Zend_Navigation http://bit.ly/zf_nav and Zend_View_Helper_Navigation http://bit.ly/zf_view_nav
jakemcgraw
+15  A: 

I recently build a complete admin interface for a shopping system with CakePHP in under three days, it was amazing. If your project is right up Cakes alley it's a dream to work with. Takes a while to get used to though, I tore my hair out for two weeks* on the first project I used Cake for before starting to get the hang of it.

*) Back in 1.1 days when documentation was sparse, the situation now is a lot better I think.

deceze
"If your project is right up Cakes alley it's a dream to work with." But if it's not, you'll be pulling out your hair trying to get Cake to do what you want. I find this in many frameworks, which is why I've made own. I shall not link it, or this will be classified as advertising spam.
Bart van Heukelom
+2  A: 

I used cakephp recently. Its easy to learn and you can develop apps fast.

Thej
+76  A: 

Kohana is similar to Code Igniter but is a PHP 5 only framework so its a bit cleaner to use.

grom
Requirements say it needs PHP version >= 5.2.3. This isn't a very good idea. The last stable release of Debian only has 5.2.0.
stesch
Great tip! I used to like CI, but Kohana is really an improvement! Thanks!
Vadim Ferderer
Debian 5.0 (released February 14, 2009) includes PHP 5.2.6, so Kohana works great!
Christian Davén
Wernight
@Wernight Unit testing does not really have to be integrated in a framework. Reverse url routing is added to Ko3
Ikke
@Ikke I was join comparing with other frameworks for a production usage, but thanks for pointing out the reverse addition.
Wernight
Just because debian keeps ancient versions alive for a long time it's not a good reason not to use something...
ThiefMaster
A: 

I know it's not a "framework" per se, but I've often used Wordpress as a starting platform for when I've need to get a site off the ground quickly and when the people adding content to the site need something dead simple to navigate.

I basically strip out the "posts" and comments portion of a template so that it's no longer accessible and then everything on the site is done with "Pages". And if the user can be a little too curious, I'll remove the unneeded options from the Admin pages as well.

The other great thing about it is that, unlike Joomla or Drupal, there are massive amounts of free extensions and templates to work with, so I can almost always get something running without every having to write very much code at all.

Adam Haile
unlike joomla or drupal... sounds strange to me. I would say Joomla and Drupal both have massive amounts of free extensions!
tharkun
I don't think that whatever you'd build with Wordpress could be called an application.
concept47
WordPress has one of the ugliest codebases I've seen for such a highly popular application. WordPress can be used for storing and accessing content if you need to integrate with an already WordPress-enabled project, but I would never recommend using it as the core of any new application.
Brian Lacy
+7  A: 

@Flubba there are several good Zend Framework tutorials and there are also several Zend Framework books due to be released soon.

ejunker
+1  A: 

@Flubba there are several good Zend Framework tutorials and there are also several Zend Framework books due to be released soon.

Getting Started with Zend Framework 1.5

ZF Tutorials

Thanks for the links! The first one (the akrabat tutorial) was for a long time the only half-decent tutorial on ZF MVC, and it's better now that it's been updated for 1.5. My comments need to be taken in the context of my experiences from January to June 2008, and you are quite right, as the framework becomes more stable there should be much better resources to come.

My main criticism of the akrabat tutorial is still that he puts too much application logic into the controller, and so it is not teaching proper MVC design principles, in my opinion. I hold to the thin controller school of thought where all the business logic should be in the model, not just data access classes.

The second resource looks neat - thanks for that, it should be helpful. As I said we use ZF at work and so it is part of my life now, regardless of my somewhat mixed experience of it.

Flubba
+60  A: 

Surprised no one has suggested symfony yet. It's quite mature and has a large developer community, lots of plugins, etc. It's also starting to get used by the likes of Yahoo!.

AdamTheHutt
After reviewing many alternatives I decided to go with Symfony and it has been a dream ever since. It's the first project that if I was given a chance to start over clean I probably wouldn't change anything non-trivial about how did the project.
donut
If you're looking for a job, there are way more offers for symfony than other PHP frameworks nowadays
Wernight
dailymotion.com is built with symfony (it's a french youtube, world 2nd in the category)
Maxime ARNSTAMM
I built a complex accrual engine with several ajax interactions on Symfony. It took about two months to reach the tipping point of familiarity with the framework. Once I 'got it' my mind could easily focus on functionality and features while Symfony provided easy code manipulation.
Christopher Altman
I researched extensively on php frameworks, and I have no doubt: I recommend Symfony
Paulocoghi
+9  A: 

My only experience is with CodeIgniter and it's fork, Kohana, I think that's how it's called. I'm happy with the way those function. However, depending on the application, a framework might become an overkill and it might just be better to use PHP and PEAR libraries without any fancy frameworks.

Thomas Owens
agreed. It can be more effective to cook up your own solution with the assistance of packages from PEAR/ezComponents/Zend/whatever - it just depends on the project requirements.
kguest
+24  A: 

I'm very hesitant when it comes to using existing frameworks, because all frameworks that I checked use tons and tons of includes and you don't have control over which include is done when. The problem with that is, that includes are processes on your hard disk, i.e. they are slow - so you should try to have as few as possible.

Just looking at the MVC implementation in Zend gives me a headache. So you include "Zend/Controller/Front.php" and "Zend/Controller/Action.php". Not too bad so far. Hovever "Front.php" includes another 8 files and "Action.php" includes another 2 (plus 3 that are already in Front.php, so they don't really count). To make it short: You end up with about 20 includes before the application even started - and only using MVC. This number will still go up when you decide to use Zend_Db or anything else. Even if you use an opcode cache the system still needs to check if those files have been updated since when they have been cached...

Ergo:

  • If I HAVE to use an existing, well known framework, I'd choose ZEND or CodeIgniter
  • Otherwise I prefer to use my own MVC framework, which is a lot slimmer.
  • There usually are very good specialized "stand alone librarys" for almost every functionality included in Frameworks (Mailer, RSS, ...). In most cases they are even much better in what they do than the "general" framework implementations.
BlaM
Actually, if you're using APC as an opcode cache, in production you should concider setting apc.stat to 0, which will prevent it from checking for updates to the files. If you update files, you can use apc_clear_cache() to flush out file caches.
Rexxars
And use absolute paths, so no stat calls are made.
Itay Moav
Zend is a joke when it comes to file includes. In magento, everything on your page is divided in 'blocks' and each block goes in its own file. So to display this page in Magento you would need at least 10-20 included files/'blocks'. And i'm talking abt only the view files here, not the code files
Click Upvote
+1 @rexxars - APC with stat=0 is great for frameworks that have lots of includes.
Cody Caughlan
includes are a problem for Zend. It should be developed so that this issue is fixed. I think that's an effect of the way Zend is loosely coupled.
AndreLiem
Many includes is not a problem. The time it takes to do those is dwarfed by the time it takes to do 1 SQL query.
Bart van Heukelom
+4  A: 

I've really never felt comfortable with CakePHP or similar tools. I really like Qcodo. It feels nice and clean and building the "gui" seems more like building the interface in Delphi or Visual Studio.

Boofus McGoofus
+7  A: 

If you want something that is consistent, well written, has strong conceptual integrity and has no external dependencies, you should try Solar. It's very clean, simple and easy to extend.

One of the main reasons why I love it so much is that it allows me to re-use almost everything I write, from templates to complete applications.

ahc
+33  A: 

Symfony. Excellent documentation. Excellent Design. Tons of features.

nasty
+5  A: 

Depending on whether your need a heavyweight solution or a lightweight tool, you might check out CoughPHP (and ORM framework for your model) and LightVC (for your view/controller framework).

Bob Somers
+14  A: 

CakePHP as well as being a wonderful MVC framework has a wonderful console. You can write scripts for cron to run or even interactive scripts for users to run in the command line that can use any model or controller you app can. You don't have to do any kludging of having a cron.php tied to a scheduled wget, or shafting the first person to visit your site after midnight with a long background process.

I've used it to generate thumbnails on large images, clean up the db, archive old items, and expire things that need expiring. It's simple and fits with the mvc cleanly. Though I might call this feature model/console/controller.

wizard
That is not incredibly hard to make though. Just set up your application environment (database and stuff) in a common bootstrap file.
Bart van Heukelom
A: 

@Karl.. You're totally right. Our in-house framework is littered with calls to the debug_backtrace() function precisely because of the lack of late static binding.

A: 

Here is a FANTASTIC article on PHP Framework benchmarks.

Cliffsnotes:

Solar is the fastest of those tested.

Symfony the slowest.

Zend is the most loosely coupled and thus the most flexible.

Where's "here"?
sirprize
please add a link
Good Time Tribe
this question I guess?
Joe
+2  A: 

At the moment I am using cakephp and typo3 lib/div (if you can call that a framework).

But I am getting a bit fed up with both of these, mostly because of a lack in documentation and community support.

The reason why I chose cakephp in the first place was the support for php 4, but now we have completely switched to php 5.

At the moment I am looking at symfony for websites which don't need an cms and SilverStripe for websites which need a little bit of customization.

Both seem to have much better documentation and community support. I also like their models a lot more than the monster associative arrays of cakephp.

cdamian
+6  A: 

Do you have to absolutely use a PHP-based framework? If not, consider Ruby on Rails in your analsysis. My team has decided that any future work will be on Rails since our current ORM is homebaked and sucks extremely bad. We were thinking of using symfony otherwise.

Good luck,

beaudetious

beaudetious
+1 After looking at all of the PHP frameworks a while ago, I settled on RoR and haven't looked back. If you care enough about code quality that you want a framework, PHP might not be the language for you.
Tobias Cohen
+8  A: 

I think Symfony is an excellent choice. It has EXCELLENT documentation and is very intutive to learn. Built-in AJAX helpers, among many other helpful libraries make it easy to build a feature-rich web application QUICKLY.

Check out the Askeet! tutorial to see how you can build a Stackoverflow-like application in 24 1-hour lessons.

Jamey
+17  A: 

If it's php... It's got to be CodeIgniter!

It's lightweight, Fast, and so easy to pick up and run with. It has great documentation! All of this pales in comparison to the amazing community that has formed around CI. I have never seen attitude on their forums (and I have posted some dumb questions). Not only are they nice but they has some very bright people writing and using CI.

If I have a choice I go with Ruby on Rails.

Kevin Kaske
Lightweight is not always what people want. Symfony has a lot more features and is more robust.
Jon Winstanley
+8  A: 

(bah where did my post go?)

You should use CakePHP because it's going to be the fastest, easiest and funnest build you ever made.

Since there is a few people that mention the zend framework, it should be said that you can have your cake and eat it to. That's right, you can use the zend libraries as vendors in cake with little issues. In fact many people claim that while cake is a true framework, zend is just a set of libraries. Let's not get into that discussiom, but my vote is definitivly Cake.

Happy baking.

Alexander Morland
+4  A: 

Symfony is a excellent framework, but it is a bit complex and quite deep. If you want something basic and simple take a look at Code Igniter http://codeigniter.com

Rushi
+7  A: 

When project requirements specify PHP, I use CakePHP.

One drawback is that Cake model finders return nested arrays instead of actual model objects. While this keeps the overhead low, the structure and index/keys for the data in the array can change depending if was part of an association, etc. This can be a problem when passing data from different finder calls to the same view. Also, being an array, you can't call business logic on results or use lazy loading to pull more information from the database.

Otherwise, it's a great framework.

+6  A: 

I think you're going to find that most people prefer the environment they work in most frequently. All of the major frameworks have something to recommend them otherwise they probably would have fallen by the wayside.

I'd recommend Drupal (it being what I'm used to) for the mass of contributed modules and out-of-the-box functionality. Drupal makes a lot of useful tasks easy that should be able to give you a site without a great deal of development effort. CakePHP is a decent choice as well if you are building from scratch, but I'm a fan of Drupal's modular architecture and built in functionality. I'd recommend against Joomla as a developer because I don't particularly care for their separation of code and display (or lack thereof in many cases) and the relative complexity of certain tasks-meaningful clean urls-compared with Drupal.

I'd also recommend against combining the frameworks for the most part because your PHP process can grow out of hand making it harder for you to handle a decent traffic load.

In the end, the choice is going to come down to preference, and I'd at least taste a couple before settling on a final choice. Figure out what seems right to you, learn the conventions and paradigms of the framework and stick to them, and you'll probably be happy.

William OConnor - csevb10
+1  A: 

For a recent project we used the Radicore framework. To be honest, it's more a pre-built application that you plug a database into and tick off some views in it's most basic form. However there are API's (reasonably well commented) for exposing access to data.

The pros:

  • Quick development
  • MVC
  • Prebuilt view templates
  • Automatic model generation (allows customisation of model)
  • Prebuilt controllers
  • Prebuilt components for: auditing, workflow, user/roles, menu, search, sort, navigation

The cons:

  • Confusing flow of control
  • Poor OOP support outside the model
  • Amature/Basic looking UI
  • Some complexity in configuration

All of these cons add up to one major problem. If you want to change the behaviour of the framework in any way, it's extremely difficult. Flow of control to various scripts is caused by requiring a specific file and having that execute inline. Often, that can happen 4-5 times in one transaction which makes changing the behaviour in the middle for certain cases is very non-trivial.

If what you're after is a CRUD application, with workflow processes and reporting built in, radicore is an excellent choice. However, if fancy UI and integrated components from other systems are required then it's probably not the right framework to use.

Josh Smeaton
+3  A: 

I'll put in another vote for Zend Framework. I have been using it for about 6 months and have been very happy with the way it all fits together. My biggest issues has been the lack of clear cut instructions and resources but given time and this should be sorted out.

+13  A: 

I've used CakePHP and QCodo for my PHP development. I've also evaluated CodeIgniter. All three have their strengths and weaknesses.

If you're a beginner to programming, then I'd recommend CodeIgniter. In my evaluation, I was pleased with their user community. I read several testimonials of beginning developers who were able to rapidly learn the framework. I'm not a big fan of CodeIgniter's data access layer. It is much better than writing raw SQL, but it lacks the simplicity of the ActiveRecord pattern IMO. On the plus side, CodeIgniter has a much smaller footprint than CakePhp. If performance is a concern, that should be taken into consideration.

If you're at all familiar with Rails, then CakePHP should be any easy win since Cake was actually started as a php version of Rails, but has since moved down it's own path. It has out-of-the-box active-record like ORM and basic code generations for your data models. The drawback of Cake is that it's documentation is lacking, and the amount of features crammed in can be overwhelming, especially at first.

QCodo is an event-driven framework that excels at code generation/scaffolding. If you are familiar with ASP.net webforms, windows forms development, or swing development, you'll catch on to QCodo's event-driven structure. Also, if your site is more of an internal use site and/or you want to have lots of auto generated forms and grids, then QCodo is the answer. However, it is probably the toughest when it comes to customizing the look and feel of your website due to the reliance on that code generation.

tyshock
Here's a vote *against* Qcodo.
leek
+1  A: 

I've just used symfony, but after I started using it, I've never been tempted to try anything else.

BTW: I guess you could have a look at yahoo, -they have built two of their apps on top of symfony. (yahoo bookmarks and delicious)

Erik Itland
+1  A: 

i'm going to be starting a new project soon and my choice is going to be zend framework with propel 1.3 as the model. I wanted a php5 frameworks and the two choices left for me were symfony and zend. I went with zend because of its integration in zend studio and the use at well architecture.

Brendon
+14  A: 

Read some comparisons by others:

Personally, I've only ever used CodeIgniter and Zend Framework. CodeIgniter I quit with after 2-3 days because I wasn't pleased. Zend Framework I have been pleasantly surprised with so far. Although, it did take a little code digging to finally get it to all fit together the way I wanted. All of the flexibility of ZF really hinders a newcomer.

leek
+1  A: 

Prado (http://www.pradosoft.com):

    * Object-oriented and highly reusable code
    * Event-driven programming
    * Separation of presentation and logic
    * Configurable and pluggable modular architecture
    * Full spectrum of database support
    * Feature-rich Web components: HTML input controls, validators, datagrid, wizard...
    * AJAX-enabled Web components
    * Built-in support of internationalization (I18N) and localization (L10N)
    * Customizable and localizable error/exception handling
    * Multiway message logging with filters
    * Generic caching modules and selective output caching
    * Extensible authentication and authorization framework
    * Security measures: cross-site script (XSS) prevention, cookie protection...
    * XHTML compliance
    * Rich documentation and strong userbase
Dr. Hfuhruhurr
A: 

lately i've been using PHPFUSE and I like it a lot.

+3  A: 

I recently made the jump into PHP Frameworks myself. After speaking with proponents (and sometimes authors) of each at conferences/ via email, here's how it seems to boil down:

  • The big 3 (Zend, CakePHP, and symfony) all seem to have the most complete feature sets. Zend seems to be the most powerful (they have some unique modules), and it's designed to allow you to plug singular modules in as you need. Zend also offers training in it, as well -- might be a good thing for developers whose companies will pay. CakePHP is the most rails-like, and (for me), it allows you to create a decent UI really really fast. Symfony seems to be pretty fast, and has the best documentation.

I haven't tried out the other frameworks, as they are supposed to be less "true" MVC. In exchange, they benchmark a lot faster. So, if speed is a big deal, try CI or one of the other leaner frameworks (but realize that they are less feature-rich). Personally, I don't worry too much about speed, since I've got recent dedicated servers to run sites that never serve more than a few dozen people at a time.

So, in evaluating these frameworks, I'd suggest you determine what you need. If you want speed, use CI. Fastest development (and rails-like simplicity), try Cake. Documentation? Symfony. Professional training? Zend.

Hope this helps! You can't do wrong with any of these, really -- I was amazed at how quickly I could turn stuff around using CakePHP (although now it begs me to add unit tests, etc., which increases dev time, but gives you better reliability.)

Travis Leleu
+2  A: 

$CodeIgniter++; It's fast, lightweight and makes your workflow sooo much easier.

Jamie Rumbelow
A: 

Hi, we have been using qcodo, but the dying community has me scared, and wondering if we should think of making a migration? I'd hate to switch frameworks mid-stream....should we stick with it?

It is NOT an internal use site, it is an external facing application.

Are we stuck with Qcodo at this point? After my initial research, it seemed like there were lots of benefits to it, but the community is as much the product as the product itself.

Thoughts?

AFG
+1  A: 

Symfony is my answer. I had the same question a year ago and I made the Symfony choice. It is easy to learn with the superb Jobeet project. They take you on a 24 day tutorial and answer all your questions. This is a solid, good framework with tons of potential for the future. Great documentation and a large community if help is needed.

Kennethvr
A: 

I am using Symfony. Is a very good design.

Previously used Codeigniter, main features: support PHP 4, and productivity.

A: 

I would recommend symfony, the new 1.2 version is very feature rich.

Try out the jobeet tutorial

+13  A: 

I use CodeIgniter and recommend it heavily as it is very lightweight and fast.

However, there is a newcomer on the block (just a couple months ago) that is even faster and more lightweight then CodeIgniter. It's called Yii and it's made by the guy who made the Prado framework. Check out this benchmark:

I haven't actually used it yet, but it looks very promising.

ryeguy
wth do those bars actually represent? how do we know this is even a fair comparison? are these numbers even insignificant, or are we talking nano-seconds on some rarely used feature?
Mark
Here is an explanation for the performance chart: http://www.yiiframework.com/performance/
James Skidmore
A: 

So which PHP framework would I use... To put it bluntly: None.

If you don't use any framework it's your loss. I have made my own little framework and use it sometimes on my own projects and sometimes I use cake or zend. It's always easier to start with a good foundation and that's what most frameworks are :)
AntonioCS
+4  A: 

It would depend on the requirements of the application, of course. But I think the answer you are looking for is...CakePHP. I love it. I get my work done in 1/4th the time, I end up writing less code, and the code that I do write is better organized and more manageable. Also the documentation and support in the IRC channel is top notch.

Zend has been trying to sell me their technology for 10 years now, and it still hasn't caught on...

Symfony is supposed to be good, but I haven't checked it out.

CodeIgniter does not have all the features of CakePHP. It is faster than CakePHP in tests, but I'd rather just build my applications to scale linearly and throw more servers at it than spend my time writing code.

Drupal is a CMS, not an application framework. If you try to develop an application with Drupal, prepare for pain.

devinfoley
+1  A: 

I've used CakePHP in a couple of production projects and it's a joy to use. The documentation for version 1.2 is in a much, much better state than it was a year ago. The reason I choose Cake over CodeIgniter is because of it's similarity to Rails (right down to the console) and the wicked ORM. There are loads of great components in the Bakery too.

A: 

I would recommend using Symfony as it offers a "standard" architecture and forces the developer to use best practices and avoid PHP's pitfalls. Moreover, symfony integrates many existing components like the Propel and PHPDoctrine ORMs. It is also wonderfully documented, and features an impressive set of plugins and extensions (even ZF components can be used really easily in a symfony project). All of which enables the developer not to reinvent the wheel and code very efficiently.

mirz
+1  A: 

i think more often than not, your better off building a framework for the required application, rather than building an application from a framework.

Just because you use a framework doesn't make you a better coder, it makes you a better user of the particular framework you choose.

To use an anology, you wouldn't use a car to build a motorcycle.(with php as the engine)

Also you dont wont to end up being a driver of a framework rather than a framework mechanic.

+3  A: 

CakePHP - fast development time (and I mean REALLY fast), simplicity, convention over configuration, Rails similarity, decent performance (with cache), ajax inegration (with Prototype - but you can easily switch to jQuery which I prefer), unit testing out of the box, authorization and authentication built in and many more. Zend on the other hand tries to be more "enterprisy" but fails :)

Well it all depends on what application you're writing, ZF is more flexible but for majority of tasks (CRUD like applications, web2.0 sites etc) Cake is better.

But if you have choice of another programming language I encourage you to try out Ruby (and Rails for webdev) - it's even better then Cake.

lego
+1  A: 

A huge +1 for Zend Framework, if you are working with larger applications or websites. There is a steep learning curve and lots of overhead, but once you get it running it's a pleasure. We've been using it for a year now with great results.

I've also had good experiences with CodeIgniter and CakePHP. I'd recommend CodeIgniter for simple MVC sites, but I ended up disliking the "core" of it, as there wasn't enough organization. CakePHP also has lots of overhead, but is awesome for CRUD applications you want to get up and running quickly. However, it forces you to use many of their conventions, so there is also a bit of a learning curve.

+10  A: 

As a follow-up to Flubba, I just wanted to point out that the Zend Framework has matured a lot since 1.5/1.0 (Docs and Framework itself), the current version is 1.8.1 and is an absolute blast to work with. I was able to get version 1.8.1 up and running within minutes and had a project going with the template I wanted and the various bits and pieces within the first day. The second day I started playing with Zend_Form to create new forms and to have them output as well as using the validators to make sure we got valid data and then using Zend_Mail to send emails with attachments to satisfy project goals.

Had I instead done this all by hand using standard PHP it would have taken me much longer, and would have made it harder to keep up with the changing and moving goals for the project (my boss keeps wanting new things after seeing how fast I added what he previously wanted).

There are also plenty of tutorials out there now using Zend Framework and showing the various powerful features, the Zend Frameowrk Quickstart is a fairly good starting point, it is the one I used to get started, from there reading the documentation is fairly easy.

The documentation is easy to follow, contains many concrete examples on how to accomplish various tasks, but at the same time there is a lot of flexibility in how to use the various components and that choice is left up to the programmer.

Tutorials:
Rob Allen: Tutorial: Getting Started with the Zend Framework 1.8
Maugrim The Reaper's Blog: Example Zend Framework Blog Application Tutorial: Parts 1-8 Revisited

Starters:
Damien Mathieu: A skeleton to build a Zend Framework application as DRY as possible

Zend Framework has come a long way from the previous versions, you are still able to pick and choose from most of the available "classes" and use them stand-alone but it is becoming a very viable framework to start off development with on new projects. It is becoming a full featured web framework that can stand up next to Cake PHP, Symfony, CodeIgniter and the many others that exist!

Zend Framework, while still one of the younger frameworks for PHP out there has some awesome potential, it is quick moving and bug fixes are being put into the framework almost daily. I recently had an issue with how modules were being bootstrapped and after reading through the bug reports I noticed that they had released a new version that day to fix those exact bugs I had been seeing!

X-Istence
A: 

I am an ASP.NET developer and recently was put on a large scale PHP application. We're building from scratch not having little experience with PHP, I did alot of research and found CakePHP to be the best solution for us.

I wrote very strong prototype using CakePHP in less than a week, without books or docs (since their docs are a little weak). I've since got a few Apress books and the project continues to move ahead very smoothly.

So far, I give two thumbs up for CakePHP.

Bryan Migliorisi
+2  A: 

For Performance I use DooPHP, just found out this framework recently. And I use Zend framework components with it since they share the same new BSD license. DooPHP + Zend = Performance + rich list of features

Besides the framework is really easy to get started than Yii or CodeIgniter. IMHO the database ORM in Doophp is very good.

There's no one BEST framework, we should use stuffs together in our application ;)

+1  A: 

I agree that ZF is the better integrated into Zend Studio and the "official FW", couse of its name :) ... But when I had to decide on which framework I would have based my products Symfony beats ZF.

I think the architecture of symfony is the better implemented in a pure PHP5+ framework, expecially in symfony 1.2 the architecture is formidable.

ZF resambles much more to a very good libraries and components repository.

Symfony is a PHP-development-platform instead and a powerful framework instead.
Symfony is not for novices, it is right, but this is a positive aspect IMHO, as one of the worst problems of a "simple" language such as PHP is that non skilled people easily can write even complex applications. Those apps being of course full of bugs, security holes and so on, requiring a certain skill is a great positive aspect of a framework I think.

AlberT
A: 

I have checked several frameworks, not only from the php world. Too bring it down to simple things: if you want SPEED then you should take php and take a look at yiiframework or doophp. This is not for people who want everything, but it is FAST as nothing else. BUT - and here it starts to become kind of fundamental - if you want FEATURES - that means you want something that gives you easy access to all things, computers can do, then I think PHP is not the right choice. If you need PDF generation, parsing and generation of office documents, connection, standards, multiserver-setup, standardized repositores and whole enterprise stuff you will very fast find yourself fiddling around with incomplete or really frustrating solutions. It is not the MVC that make frameworks interestng - it is what they give you in terms of power. PHP is FAST - but yu will have a major lack of good integration into anything else. In Python, Perl or Java world you get a solution for nearly every problem implemeted in a clean way that you can use with every web framework existing for these languages. Look at what you really need - simple website or an advanced service? For a SPEEDY solution php is still best way to go.

BTW: Mentioning Typo3 here is kind of a joke, I believe.

A: 

I'll add my 2 cents too. First of all, it depends on your environment. Many people like hosting their applications on a shared server. If this is the case, a light-weight framework or pure OO PHP is much recommended.

But if server resources is not a problem, many options open up. I've seen Zend being recommended as a good framework by many. Codeigniter is good because it's kind of a skeleton framework. It doesn't have unnecessary magic, but it has all the libraries that you'll commonly need. The learning curve is quite small if you're experienced.

Recently, the Yii (yiiframework.com) has made a lot of progress. You might want to check this framework out. I played with it a little and it's really powerful. So before considering other frameworks like Codeigniter or Zend, try Yii to see if it does what you want.

AgilE
+2  A: 

In my opinion, Zend Framework is the best one. It's well constructed and encourage you to use best practice to make your project more professional. It also have a emerging community which will help you every concerned issues.

Thang Nguyen
+1  A: 

I used CodeIgniter then switched to Kohana.

Kohana is basically a fork of CodeIgniter. The developers cut out the PHP 4 compatibility and rewrote it to use the features of PHP 5 (full OOP)

Although Kohana 3.x is out, it's still pretty much unstable IMHO So I'd suggest using Kohana 2.x

If you understand CodeIgniter then Kohana won't be a problem neither.

feketegy
+2  A: 

Cakephp with Zend in the vendors folder for its libraries.

Chris
A: 

i think symfony is the best. Documentation, samples, great tools... also there is a point i want to understand, why many people copare symfony with CI. CI far far away from symfony's league. CakePhp and Symfony or ZF comparasion would be right, but CI very lightweight than others.

metoikos
+1  A: 

I've been using CodeIgniter for a few commercial projects lately. It's been pretty good, taking care of the MVC stuff without much fuss and providing lots of useful helpers. One down side is the lack of a ORM out of the box though the database helper functions make creating your own quite easy. For my next application I'm going to have a look at Kohana, apparently it builds on codeigniter but using PHP 5 exclusively. Also includes its own ORM framework.

Stuart Quin
A: 

I've worked with both Solar and Zend framework and I have to say of the two I much preferred to work with Solar. The Solar framework has strong capabilities, intelligent organization, active community and is mature and tested. I exclusively use Solar for all of my PHP development.

I've made use of Zend but have never found to be quite as easy to use, or as quick for development as the Solar framework.

James Kilbride
+1  A: 

I use Solar for all my development.

  1. light-weight, and feature rich
  2. excellent command line scripts
  3. models are top notch
  4. views and layouts based on Savant. They are intelligent and many helpers available
  5. auto form building
  6. excellent API documentation
  7. based on many fundamental design patterns
  8. easy to customize, override
  9. new documentation in production
  10. model validation is simple
  11. model and form integration

I can build complete database apps with admin interfaces (Browse, Read, Edit, Add, Delete) in no time flat.

jelofson
+2  A: 

My first foray into frameworks and MVC started a few years ago with CakePHP. To be honest, I found it quite difficult to understand and tried out CodeIgniter after a couple of weeks, which I picked up very easily.

After playing with CodeIgniter for a while, I then began to understand the other frameworks much better. It's got a very easy learning curve from a procedural PHP background.

I've tried pretty much all the PHP frameworks since, and although I'd dearly like to spend some time with Symfony, my choice at the moment is Yii which continues to impress me the more I use it.

Zend - I dunno, I never really got the tutorials to work properly myself. It just doesn't feel right for me I'm afraid. Like I need to wrestle with it to get what I want.

Outrage
+2  A: 

I developed for over a year with Cake PHP and found it very powerful in allowing me to quickly move from concept to prototype to production. If you are making a site which isn't going to break them mould, it has so much scaffolding already in place that you can concentrate on the parts of the site that matter.

However, for power, I am using Zend Framework a lot now. It is a lot harder to learn and slower to get a site up and running even with the command line tools it offers. But the development is moving forwards at an impressive pace and the functionality on offer is awesome but loosely-coupled enough to mean you can easily cherrypick what you need.

I haven't tried Cake PHP with ZF as a vendor as others have suggested but I imagine that would give the best of both worlds for a site that was mostly offering the standard CRUD stuff but needed the odd more complex bit of functionality.

voidstate
+3  A: 

I've been using CodeIgniter for since August 2009 and I absolutely love it. It's easy to learn, the source code, even though a lot of it is still in PHP 4, is very clean and very well written, the documentation is really good, straightforward and easy to navigate, the community is amazing. I would definitely suggest that as a first PHP framework.

Before CodeIgniter I had tried CakePHP. Although it has a nice command-line tool, it a lot harder to learn and the documentation is not nearly as good as the CodeIgniter's one. Also CakePHP's performance is really lacking, applications you create with it end up being really slow. All in all I really think CakePHP is really bloated and it would be much better if it was a bit more modular.

Recently I also tried Recess and Yii. My first impression is that they're really interesting but I haven't used them enough to talk about them extensively.

Aziz Light
+6  A: 

No one seems to have mentioned the different types of framework as in Full Stack versus Glue. Without duplicating the excellent material already posted.

Glue frameworks such as CI, Kohana and Zend allow you to pick the parts you want and leave out the ones you don't. Not just the helpers but in CI/Kohana you can leave out say the Model part of the pattern.

However with the likes of Symfony and Cake you have to implement the whole shooting match the framework designers way without the option.

Neither approach is correct or incorrect an there are situations where you would use Glue over Full stack and vice versa.

There may well be arguments over what is defined as Glue or FS.

The real choice comes down to what the end result is going to be and how you make the journey and selecting the right tool for the journey. That will usually involve getting it wrong a few times.

PurplePilot
You are correct on the part where you say that Symfony has to be installed completely. There are a huge pile of plugins available these days to add features to your Symfony framework. The basics should be inserted from the beginning if you want to use a framework, I don't see the advantage of leaving out the MVC from the beginning... it's the purpose of a framework to not reinvent the wheel each time you start a new project... which one is better is a peronal choice....
Kennethvr
+6  A: 

After toying with several frameworks, I finally landed on CodeIgniter. I'm going to quote this from their website, because it is very accurate:

CodeIgniter is right for you if:

  • You want a framework with a small footprint.
  • You need exceptional performance.
  • You need broad compatibility with standard hosting accounts that run a variety of PHP versions and configurations.
  • You want a framework that requires nearly zero configuration.
  • You want a framework that does not require you to use the command line.
  • You want a framework that does not require you to adhere to restrictive coding rules.
  • You are not interested in large-scale monolithic libraries like PEAR.
  • You do not want to be forced to learn a templating language (although a template parser is optionally available if you desire one).
  • You eschew complexity, favoring simple solutions.
  • You need clear, thorough documentation.

A couple of things I'm gonna addon/re-iterate:

  • DEAD simple to install. Just drag-n-drop. No configuration necessary.
  • Great User Guide on their site
  • Simple and straightforward MVC setup
  • Very fast and not bloated in any way
  • The database classes Active Record stuff is awesome
  • Easy to expand with custom classes and helpers

I first started messing with ZendFramework cause I heard it was so great. But wow.. getting that thing installed was a royal pain. Maybe on certain servers out there its very simple, depending on how PHP is setup. But on the particular server I was working with (a stanard hostmonster web server) it was horribly difficult.

I also tried going the PEAR and CakePHP route, but PEAR was just too monolithic and CodeIgniter just seemed better/easier/faster than Cake.

Jakobud
I am very happy with the PEAR power and will definitely look at other more robust options in the future.
shantanuo
I agree with this. CodeIgniter has been my choice for MVC framework for PHP. it made it simple for me to understand the concept of MVC framework.
trace
A: 

I really like the Zend Framework for flexibility and features on large projects. The community support is also fantastic, even compared with its much older siblings like CakePHP.

However, for small, fast projects, I highly recommend Kohana. It's based on CodeIgniter but with an extra emphasis on speed, and in my opinion, a bit more configurable. Its small community is offset by a very clean codebase.

Brian Lacy
Zend Framework has also come a very long way in terms of initial installation. The command line tool in 1.8/1.9 is a welcome addition that should ease the transition for newcomers.
Brian Lacy
+1  A: 

CodeIgniter would be my choise. I've been using CakePHP, but after moved to CodeIgniter programming speed and performance increased.

Anatolij
+1  A: 

Zend is good, but too bloated. I prefer lightweight. I want more control of everything. That's not the case with CI, Cake or Kohana. But there's Fat-Free. Follows the Sinatra DSL model. Self-contained, single-file. It has no ORM, but like I said, I want full control, and that includes SQL statements, that way I can optimize my database. It's got a template engine, CAPTCHA, cache for URLs and frequently-issued database queries.

What makes it different is its declarative approach to programming (it makes you feel like you're not programming in PHP at all, but that may be subjective) and the integrated JS/CSS minify feature. And all these features were squished in a 42KB file, most of it is inline documentation.

stillstanding
+1 It may not be the greatest framework, but it gives a clean and simple set of rules and then you're off. I love the fact it's in a single file as well and what amazing documentation!
Jesse
+2  A: 

I have only worked with Cake and Zend so far, but I out rate Zend much better than Cake , Zend gives you the true power of OOPs in PHP and it also gives you MVC using actual true classes in php 5.3 unlike cake which is built in php 4.

My 10 points for Zend..

Sumit Ghosh
A: 

The answer is almost always "it depends". I recommend writing the app first really quickly to find out where the real issues are.

MathGladiator
+1  A: 

My framework of choice is http://www.pradosoft.com/ because is very similar to .net framework implementation and have namespaces like .net

pho3nix
A: 

I have been working on a framework called the RDS Framework. It is the offspring of a lor of websites I made in PHP. With every website I made the system turned into a whole framework.

You can download it and give it a try, it is nicely structures and it is focused on web-development. It has some special features and structuring that is not available in some other frameworks.

There are also some extensions you can download so you can make the framework bigger to your needs.

There are also some video tutoials and there is a documentation to get you started.

Saif Bechan
I really didn't like your framework. It's just classes being instantiated without any reason. Just because you are trying to use the mvc pattern doesn't mean you have to instantiate the router and controller class for no apparent reason.
AntonioCS
Hi thank you for commenting, but I wish it was more useful. Your comment is like saying:"I don't like this house because it has a bathroom and I do not shower". The framework is build in such an easy way that you can easily work without the classes router or controller. But if you are going to use it for web development, as I suggest, then those classes are quite handy. Where do you suggest the code of the default controller and router should be?
Saif Bechan
+1  A: 

I've worked with CodeIgniter, Kohana, and Yii (and to a lesser extent Cake & a few others) and hands down feel the Yii was the best fit for me.

Eric C C
A: 

I researched extensively on php frameworks, and I have no doubt: I recommend Symfony.

The Best PHP Framework: Is Symfony Really It? http://www.dustinweber.com/main-page/the-best-php-framework-is-symfony-really-it/

Top 10 List: http://www.phpframeworks.com/top-10-php-frameworks/

Paulocoghi
A: 

Zend Framework i use for all my projects.

Brandon_R
+1  A: 

You can try this.

Vitche Emission PHP Framework is a non-commercial Open Source lightweight PHP Framework.

The key idea of that framework is to use central repository for keeping source code and providing all client software with an ability to do real-time source code updates. That makes the client free from the need to keeps the framework's source code.

The following features are supported in the Emission Framework:

  • ORM for database access;
  • SOAP client;
  • REST web service;
  • SOAP-to-REST gateway web service;
  • ICQ client;
  • WordPress content client;
  • SiteMap content client;
  • Caching;
  • GrossCommerce SOAP client;
  • Some UI components.

The source code is available at: http://emission-framework.com

Emission Framework
A: 

Also the Prado Framework is cool.

Emission Framework
A: 

Check out this post and opensource project, it seems very interesting.

http://www.excedesoft.com/blog/symfony-cms-opensource-project-apostrophenow/

Fabian Castillo
+1  A: 

I am surprised nobody has voted for Lithium yet. Lithium is a brand new framework that has a lot in common with CakePHP, but with the annoying bits improved. It has a database API that looks and acts more like Zend Framework, with find operations returning record sets and records as model instances instead of associated arrays of data.

Downside: PHP 5.3 and up required, because it uses all the fancy new stuff like late static binding, namespaces, etcetera. Also, it's still at a development stage with much documentation lacking.

Sander Marechal
Perhaps because it has been stuck at 0.9.5 since May, didn't support relationships last time I looked, has virtually no documentation. In answer to the question, it's definitely not a framework I'd choose for a new application. Yet.
Leo