CakePHP Application Development

By Ahsanul Bari , Anupom Syam
    Advance your knowledge in tech with a Packt subscription

  • Instant online access to over 7,500+ books and videos
  • Constantly updated with 100+ new titles each month
  • Breadth and depth in over 1,000+ technologies
  1. Introduction to CakePHP

About this book

Cake is a rapid development framework for PHP that uses well-known design patterns and provides a structured framework that enables PHP users at all levels to rapidly develop robust web applications, without any loss of flexibility. It means you can code faster, your code is better, and it makes writing Web 2.0-style apps a snap.

This book offers step-by-step instructions to learn the CakePHP framework and to quickly develop and deploy web-based applications. It introduces the MVC pattern and coding styles using practical examples. It takes the developer through setting up a CakePHP development and deployment environment, and develops an example application to illustrate all of the techniques you need to write a complete, non-trivial application in PHP. It aims to assist PHP programmers to rapidly develop and deploy well-crafted and robust web-based applications with CakePHP.

Publication date:
July 2008
Publisher
Packt
Pages
332
ISBN
9781847193896

 

Chapter 1. Introduction to CakePHP

Most technical books start by outlining the good features of the concerned technology, so that the reader is convinced that the technology is worth learning, and the book is worth reading. But unlike those books, this one starts with a warning:

"Once readers have gone through the book, there will be no turning back! Web development will never be the same again. Developing a web application will become so easy, that it might make the readers very lazy. As a matter of fact, readers might even forget the basic syntaxes of PHP! And the word Cake will have a completely new meaning to them"

If you are still determined to read along, you are welcome! But do not blame us later; you have been warned!

We are going to start our journey into CakePHP by trying to understand what CakePHP is and how it will help us develop web applications faster, that are also easy to manage and maintain. To be more specific, in this chapter, we are going to see:

  • What is CakePHP?

  • How CakePHP helps in structuring and maintaining the code?

  • How CakePHP helps in reducing the development time and effort?

  • And, which version of Cake should be used?

 

What is CakePHP?


According to the official CakePHP website (http://cakephp.org):

"Cake is a rapid development framework for PHP which uses commonly known design patterns like Active Record, Association Data Mapping, Front Controller and MVC. Our primary goal is to provide a structured framework that enables PHP users at all levels to rapidly develop robust web applications, without any loss to flexibility."

Someone who is new to frameworks might not understand parts of the definition. But understanding a few key terms will make the job much easier.

A PHP Framework

A PHP framework is a collection of code, libraries, classes, and run-time environment that helps developers build web applications faster. The main idea behind using frameworks is to provide the developers with commonly used functionalities and a basic structure that they can build their application on. Most PHP developers, who have some experience, have their own set of libraries and structure to help them develop faster, as they can use their code base (and experience) from one project to another. But, building a web application on an open-source framework like CakePHP has its obvious benefits. By doing so, the developers not only use their own experience, but also the experiences of many other developers who have used and developed the framework. Also, the framework is much more reliable as it is used and tested by many application developers. Besides, using a framework like CakePHP has the advantage that all the developers involved in a project have to follow the same conventions and rules to structure the application. It makes it very easy for new developers to settle down if they are familiar with the conventions of the framework.

Common Design Patterns

A design pattern is a general solution to a commonly occurring problem in web development. A design pattern is not a complete code, rather it is a description for how to solve a problem that can be used in many different situations. In web development, there are many common design patterns that are used to solve repeating and common problems. CakePHP has many of these design patterns integrated into it. Some of them are mentioned in the above definition: Active Record, Association Data Mapping, Front Controller and MVC. Among them, MVC, which stands for Model View Controller, is at the core of CakePHP. We will soon discuss MVC, and other important design patterns, in this chapter. The other design patterns will be discussed throughout the book.

Rapid Web Development

The integration of common design patterns into CakePHP means that developers need not waste time in trying to solve problems that are commonly present in almost all web projects. These are already solved in CakePHP! As a result, the developer can focus on the specific business logic of the application, rather than being busy in trying to reinvent the wheel. This results in much faster and rapid application development.

Works with PHP4 and PHP5

Though it is not mentioned in the definition, CakePHP works out of the box with both PHP4 and PHP5. So, as long the developer follows the CakePHP convention, their application will be easily portable between the two versions of PHP. Unlike many PHP frameworks, the developer need not worry about compatibility issues. Web servers with either PHP4 or PHP5 will gladly run CakePHP-based applications. But having said that, it is always a better idea to use PHP5 if compatibility is not an issue for the project. Since most CakePHP apps are custom applications, PHP4 compatibility is normally not an important factor. So, using PHP5 for CakePHP application is definitely recommended.

CakePHP is Free and Open Source

Yes, that is right: CakePHP is an open-source project and it is free for anyone who wants to use it. It is distributed under the MIT License. That means that not only will people be able to use it free of charge, but they will also be able to look at the source code of CakePHP, and find out how the magic works.

Now, that we have a better understanding of the main concepts behind CakePHP, do have a second look at the definition! It should be much easier to understand. More importantly, we now have a good understanding of what to expect from CakePHP, as we now know what it is!

 

Improved Code Structure


PHP is a wonderful programming language for server-side web development. One of its benefits is that PHP is very easy to learn. Any person with some basic programming skills (even without it) can start making dynamic web pages. PHP gives developers a lot of flexibility in the way that they code. In other words, it does not restrict the developer to follow a certain structure. This is also one of its major drawbacks. As inexperienced programmers start to built bigger applications, most of the time, the code becomes so unstructured that it becomes very hard to debug or modify even a small change. The same situation also occurs with experienced PHP developers, when the application becomes complex. The situation gets even worse, when multiple developers work in a single project, each following their own way of coding. The main reason for this problem is that PHP does not restrict the developers to follow a certain structure.

CakePHP helps to solve this problem by restricting the developers to follow a strict structure. By doing so, it makes sure that the overall code of the project has a structure that is easy to manage and maintain.

The most important design pattern that CakePHP uses to maintain a structured code is the MVC (Model View Controller) pattern

Understanding the MVC Pattern

The MVC (Model View Controller) pattern is a commonly used design pattern in software development, where the code is separated into three major parts: models, views, and controllers. The exact purpose of each part depends on the implementation, as it may vary from one framework to another. Here, we are going to describe the way CakePHP implements the MVC pattern. So, this is not a general discussion on MVC pattern, rather we are only going to see Cake's own MVC implementation. As we have already mentioned, CakePHP separates the code into three separate parts: models, views, and controllers.

Models

In CakePHP, a model represents a particular database table. Each database table should have a model representing it. So, in CakePHP, every database table has its own model. All PHP code related to accessing, adding, modifying or deleting records from the table are situated in the model. The model also contains code that defines its relationship with other models. Other than that, the model also defines the data validation rules when adding or updating data for that model. Model can be thought of as the data layer of the application. The model is also the place where the business logic related to the model should be defined. For example, if we have a model to represent cars, all actions related to it like buy car, sell car etc. should be defined in the model. Models should be the place where the core business logic of an application are defined.

Controllers

Controllers, in CakePHP, control the application flow or logic of the application. Each web request is directed to a particular controller where the user input (POST or GET data) is accepted. The controller logic then decides what response is generated. The controller logic normally contains calls to models to access data, and also other functionalities like access control check etc. Lastly, the controller passes the response (output) to the view (discussed next). Controller can be thought as the control logic layer of the application. As mentioned above, the model should have all the business logic of an application. The controllers should just delegate the actions to the model, and be light. This design philosophy is sometimes referred to as the "fat models and thin controllers".

Views

Views are the outputs or responses that are sent back to the user once a request is processed. They basically consists of markup (like HTML) code with embedded PHP code, but they can also be other forms of output like XML, PDF document etc. depending on the situation. Views can be thought as the presentation layer of the application.

How It Works

So now that we have a better understanding of all the three components of CakePHP MVC, let's see how these three components work together to handle a request.

The diagram above shows how it all works together:

  1. The request is dispatched to the controller, with user data (POST and GET data).

  2. The controller processes the request, and calls the model to access the data.

  3. The model responses to the controller's call, by sending or storing data.

  4. The controller then sends the output data to the view.

  5. The view outputs the data in the proper format.

As we have already seen earlier, using the MVC pattern helps to structure the code into modular segments. This allows the developer to quickly make any changes if required and as a result, debugging and modification becomes a much easier job. Using MVC also has the added benefit of reusing code. For example, a single model code can be used in any controller that needs to access the data in that model.

Another benefit of MVC is that it results in a shorter development time. But MVC is not the only tool that CakePHP has to quicken the development time. There are many more as we discuss next.

 

Faster Development


One of the main reasons that most of the modern web applications are built on a framework is for faster development. Using frameworks, like CakePHP, it is possible to develop web applications much faster than it would have been possible using raw PHP. Other than the MVC pattern, CakePHP comes with many other tricks and magic that aids in faster web development.

Less Configuration, More Convention

One of the main philosophies of the CakePHP design is to have minimum number of configurations. Configurations are normally required to make sure that the system is properly set up, and behaving the way we want it. But with CakePHP, these configurations are kept to minimum. In fact, the only thing that we need to get CakePHP running is to let it know the name of the database to use, and nothing else need to be specified!

CakePHP was designed in a way that it relied more on conventions than on configurations. Conventions are stuffs like the name of the database fields, name and locations of models, controllers and views. If these are named and placed according to the CakePHP conventions, Cake will automatically find and use them properly. That is why it is important to understand the naming conventions that CakePHP uses. Once we are familiar with that, we will never have to worry about configuration again.

Auto Code Generation

Just imagine how much easier it would be if we have a working code base that is specific to the application we want to develop, even before we have started to write a single line of code. Well, with CakePHP, we do not need to imagine anymore, because it is a reality. CakePHP built-in code generator is more commonly known as the baking script. All we need to do is to specify the database tables for the project, and start baking! It will automatically create the models, controllers, and views that we need. Using this generated code, we will have a running application that can insert, edit, list, and delete data from all the database tables.

Quick Access to Related Data

CakePHP has useful design patterns integrated that makes it very easy to access and modify data from the database. It has a very neat data abstraction layer, and also has support for association data mapping.

With Cake's data abstraction layer,, we will never need to write SQL queries again, to retrieve or modify data. By calling appropriate model functions, we will be able to access the data very easily. All data will be returned in nicely formatted associated arrays without any hassle.

Association data mapping is a technique by which CakePHP is able to fetch data from not only a single table, but if necessary, all (or selected) related data from other database tables as well. For example, suppose we have a posts table that contains blog posts, and another table named comments that contain all the comments. Now, if we want to fetch a single post along with all the comments of that post, all we need to do is to call a single model function that will not only return the post, but also all the related comments. CakePHP will automatically fetch all the related data from other tables, and send them along with the desired data. We no longer need to write complex or multiple SQL statements to do it.

Built-in Commonly Used Functionalities

Other than the above mentioned features, CakePHP has loads of other functionalities so that the developers do not have to waste time coding solutions to commonly found features in web applications. Some of them are mentioned below:

  • Built-in Data Validation: CakePHP has a very extensive data validation mechanism, where we just need to specify the valid data type, and CakePHP will handle the rest.

  • Custom Page Layout: Most of the time, an application has a common look-and-feel for all the pages. Using CakePHP's layout functionality, we just need to put the layout file in the proper location, and all the pages will use it.

  • Access Control: If we are building an application where we need to control the access of different parts of the application, depending on the user type, we can easily accomplish this by using the Access Control List.

  • AJAX Helper: Adding AJAX functionalities using the built-in AJAX helper (that uses Prototype and Scriptaculous) is very easy. This can be accomplished without writing a single line of JavaScript.

Other than these, there are other many useful features that help in developing an application in record time, using CakePHP.

 

Versions of CakePHP: 1.1 and 1.2


Now that we know all the exciting features of CakePHP, the next thing is to decide on which CakePHP version to use. There are two major versions present at the moment: the more stable 1.1, and the exciting new 1.2. Though 1.2 has been around for quite sometime, it is still in beta stage. But having said that, the Cake community is very confident of this version, and proudly declares that 1.2 is one of the most stable beta software out there. There are many production quality web applications that are running on 1.2. And, the new features and enhancements made to this version are too good to not use it. As a result, we will be using the 1.2 version in this book. Hopefully, by the time this book is out, the stable version of 1.2 will be out too. So, without any delay, download the latest CakePHP 1.2, and move to the next chapter to find out how to install it.

 

Summary


In this chapter, we saw what CakePHP is, and how it can help us to develop web applications that are well structured, and that are also fast to develop. We also discussed what we understand by a PHP framework and what design patterns are. We looked closely into the MVC pattern, which is an important part of CakePHP and helps to organize the code neatly. Then, we discussed the features of CakePHP that helps in developing applications faster. Lastly, we saw why we will be using CakePHP 1.2 for all the chapters in this book.

About the Authors

  • Ahsanul Bari

    Ahsanul Bari is a web application developer from Dhaka, Bangladesh. After graduating from North South University with a bachelor's degree in Computer Science, he has been involved in developing various web applications for local businesses. At a very early stage of his career he felt the need for tools and techniques to build structured and maintainable web applications. That is when he found out about CakePHP. It was love at first sight and he decided to use CakePHP for his future projects. He never had to look back, and from then on he has been heavily using CakePHP for all kinds of projects. Most notably, using CakePHP, he developed an ERP solution for companies involved in urban and land development.

    Apart from that, he has also 'irregularly' contributed to the CakePHP Documentation Team. He is also an 'irregular' blogger (http://ahsanity.com and http://ahsanity.wordpress.com). Just when people start to think that he has given up blogging, he is known to write a post from nowhere! Among his friends and colleagues, he is known as a fanboy for CakePHP.

    Currently he is working at Trippert Labs, where he has been involved in making a travel-based blogging system, http://www.trippert.com.

    Browse publications by this author
  • Anupom Syam

    Anupom Syam is a web application developer from Dhaka, Bangladesh. He started programming back in 1998 in C when he was a high school kid. In his early university years, he met Java and fell in love immediately. Through the years he has become proficient in various aspects of Java (ME, SE, and EE). Early in his career he was engaged mainly in building localized mobile applications. Over time his interest in web technologies grew and he did not hesitate to jump onto the Web 2.0 bandwagon. Over the last five years he has been working with different startups and building web/mobile applications. He currently works as a Development Engineer at Trippert, Inc. where he has been involved in developing a travel-based blogging system http://www.trippert.com (which is developed using CakePHP) as the lead back-end programmer.

    He loves to build rich-client web apps with JavaScript/AJAX in the front end and CakePHP/RoR/MySQL in the back end. He still uses Java heavily for his personal fun-time projects. He also maintains blogs: http://anupom.wordpress.com and http://syamantics.com. Besides programming he is interested in many things, ranging from the most recent scientific discoveries to ancient Vedic philosophies.

    Browse publications by this author
Book Title
Access this book and the full library for FREE
Access now