We have seen on web that there are so many solutions but i notice that people always ask which ones is good ? Does such a framework exist who do all jobs well ? Usually my first answer is .. your question is a bit like going to the hardware store and having a conversation like:-
You: I'd like to buy some tools. Staff Member: Ok, great. What are you building? You: Don't know yet. But I'm sure I'll need some tools.
Second it's obviously that there are so many metrics of what good can possibly mean like, disk size on server, amount of code generated for the client, difficulty of installing / configuring process on the server, etc...
There is absolutely no point in solving a problem until you have a problem. Just code vanilla PHP until you decide some particular task is too hard/messy/etc and a framework will actually help you and, this may go against the "must-have-framework" crowd, but honestly I think for trivial tasks you're typically better rolling your own.
Why MVC ? I don't want make you confuse but i found that it's up to you how much you would like build your application scalable and modular like security and all features that's you want to apply.. see my previous one posts ..
I like MVC but Just make sure you avoid the temptation of creating a single monolithic controller. A web application by its very nature is a series of small discrete requests. If you send all of your requests through a single controller on a single machine you have just defeated this very important architecture. Discreteness gives you scalability and modularity.
You can break large problems up into a series of very small and modular solutions and you can deploy these across as many servers as you like. You need to tie them together to some extent most likely through some backend datastore, but keep them as separate as possible. This means you want your views and controllers very close to each other and you want to keep your controllers as small as possible.
So design your goals first.
1. Clean and simple design
* HTML should look like HTML
* Keep the PHP code in the views extremely simple: function calls, simple loops and variable substitutions should be all you need
* Input validation using pecl/filter as a data firewall
* When possible, avoid layers and other complexities to make code easier to audit
* Avoid include_once and require_once
* Use APC and apc_store/apc_fetch for caching data that rarely changes
* Stay with procedural style unless something is truly an object
* Avoid locks at all costs
Now come to title of post .. one to one "CodeIgniter vs Symfony" comparison .. overall, symfony is more sophisticated (ie. harder to use ... it has 7 times more codebase than codeigniter) while codeIgniter seems more geared to low level of programming and environment but yes symfony has complete features of set that makes it much stronger and scalable.
Finally i summarized and here are few my concerns that you should keep in mind while choosing a framework.
1. choose PHP version > 5.3
In PHP, an object is destroyed when it goes out of scope. This is normally when the script stops executing or when the function it was created within ends. unset($my_variable); we need to be fine allowing the destructor to handle closing the DB in most situations. The garbage collector or GC in PHP will do all the work you need once the variable goes out of scope or there are zero references to it. To be clear, the GC got a major rework in PHP 5.3.
2. Use PHP's PDO for model http://php.net/pdo
3. Use open source for rich UI work like http://developer.yahoo.net/yui/
4. Use PHP's pecl/filter extension for automagically sanitize all user data
5. Use auto include configuration setting in PHP to avoid include one and required once see http://php.net/manual/en/ini.core.php#ini.auto-prepend-file
6. Use PHP's inbuilt APIs for opt code caching http://php.net/apc_fetch
Clean separation of your views, controller logic and backend model logic is easy to do with PHP. Using above ideas, we should be able to build a clean framework aimed specifically at our requirements instead of trying to refactor a much larger and more complex external framework.
Many frameworks may look very appealing at first glance because they seem to reduce web application development to a couple of trivial steps leading to some code generation and often automatic schema detection, but these same shortcuts are likely to be your bottlenecks as well since they achieve this simplicity by sacrificing flexibility and performance. Nothing is going to build your application for you, no matter what it promises. You are going to have to build it yourself. Instead of starting by fixing the mistakes in some foreign framework and refactoring all the things that don't apply to your environment spend your time building a lean and reusable pattern that fits your requirements directly. In the end I think you will find that your homegrown small framework has saved you time and aggravation and you end up with a better product.