Quite similar in their approach, CakePHP and CodeIgniter are widely known and accepted frameworks. On a number of things, including their support for PHP4. Any description of one inevitably leads to someone mentioning the other.
They both try to develop an MVC architecture which simply means they split data Model from the Controller (something that draws data from the Model to give to the view) from the View (that actually seen by the users).
Both of them use Routing which has a URL and measures it to a particular function within a controller or actions. CodeIgniter supports regular expressions for routing; on the other hand you will have to wait until CakePHP 1.2 for that feature.
Both platforms support Scaffolding, which is an automated path producing a view based on the model. Scaffolding actually is required for easy prototyping and CodeIgniter tales it a step forward by requiring a keyword in the URL to even access the scaffolding. A user can ignore the keyword, leaving this feature optional indeed. A few users prefer not to have to use the keyword as they sometimes create personal projects not intended for public eyes and using a keyword would be a nuisance.
Outlook to Simplicity
What makes CodeIgniter an appealing platform for the users is the simplicity in its approach. In CodeIgniter, most of the work is done in the controller, loading in libraries, getting data from the model, and pulling in the view. On this platform, everything is in plain sight and a user can see how things function.
The simplicity of CakePHP comes via automation and a user enjoys a quicker process through this; however, it becomes harder to find out “what is happening” without putting your head into the core.
Working with Models
CodeIgniter model handling is clearly straightforward and basically allows a user to imitate a standard SQL query with some straightforward commands. A model project is also created and can be loaded to create custom methods to handle a custom task. To help isolate code into the MVC silos, a user can do this in the model and not the controller.
A slightly different path, on the other hand, is taken by CakePHP automatically for loading in the model that matches the current controller. This automated loading can be turned off by a user and even allocate various models that should be loaded by the controller instead.
Things are also taken further by CakePHP by establishing all the model associations for a user as it enables for some really easy querying.
It is noteworthy that these two frameworks have a lot going for them. They have a much simpler approach to application development than the complexity that is something like Symfony. For a number of developers, CakePHP has an upper hand over CodeIgniter for much of the “automagic” that I mentioned. Its defects have been given a talk with every new iteration.