Cake PHP

Scaffolding with CakePHP

This article is dedicated to Alex, that asks to me how to create a basic CRUD from a database without development, this is called Scaffolding.

For me, Scaffolding is one of the most amazing techniques that people don’t want to use. Exist a major reason, that reason is every time someone access to the URL and execute code, a huge process begins asking for database and constructing the CRUD from zero.

Exist a lot of frameworks with Scaffolding in PHP, but I prefer CakePHP by their simplicity. Other languages like Python with Django and Flask or Ruby On Rails have their own mini scaffolding.

A little Terminology

Actually, the last version of CakePHP don’t support Scaffolding, they remove in 2.5 version (actually the last version of CakePHP is 3.3).

Before to begin I want to explain some of the vocabularies here:

  • CRUD: means CReate Update Delete. Actually when developers talk about CRUD refer to the pages needed to list records from a database, form to create new records and form to update record.
  • Scaffolding: Technique that creates CRUD list and forms on the fly and shows it.

Ok, continue explaining the difference between the two main techniques regarding this. The best of both is CRUD generation. CRUD Generation executes one code that explores the database and generates the PHP files needed to access a database. Scaffolding does something similar, explores database and create CRUD on the fly. This is the reason that needs a lot of resources.

If you have a consistent database and don’t need to change anything I recommend that you use some of the CRUD generators. Two of the best for me:

We need Data

Now I want to begin our amazing scaffolding project. First of all, I need to create a database. I will begin to create 2 tables. One of the articles and other from categories of articles. Something simple.

I followed model convention name of CakePHP:

https://book.cakephp.org/2.0/en/getting-started/cakephp-conventions.html#model-and-database-conventions

I don’t want to enter to explain databases, I suppose that you can figure out how to create your own database and tables and connect to a server. Anyway, here the structure:

 

Install Cake

It’s time to install CakePHP. You can choose download or use git. I prefer git but maybe you want download:

Git

I create a directory and enter it and clone:

With -b ‘2.4.9’ in clone we are telling that only want this branch or tag. If you look VERSION.txt of CakePHP you can see version:

Download

You also can download directly from GitHub. Follow next link and click green button called Clone Or Download and then click Download ZIP. Decompress file in a directory and continue.

https://github.com/cakephp/cakephp/tree/2.4.9

 

Try It

If you are using Apache in your environment, all works fine and you halt next step.

NGINX

In another hand, if you work with nginx you need to configure your server to make a good environment for CakePHP. Follow instructions in CakePHP Cookbook:

https://book.cakephp.org/2.0/en/installation/url-rewriting.html#pretty-urls-on-nginx

Trying

Then, if you load now your CakePHP URL you will see your first big screen 🙂

screen-shot-2016-11-15-at-11-25-17

 

This is correct, CakePHP is telling us that all is correct but a database isn’t we need to write database config.

Configure Cake

First, we need to connect to a database. This means that we need to create a configuration file. We have one sample file in:

Rename it to

And open it, search for the next code and fill with your data (is important that uncomment utf-8 if you use accents):

A configured database, next step, begins the big and complex scaffolding code.

Creating Models

Now it’s time to create the models’ files to tell CakePHP what tables are involved. Create a file:

And write (or paste) the next code:

Save it and do the same with Articles:

And code:

It’s done, we have models.

 

Creating Controllers

It’s time to create Controllers. Controllers are files that control an execution of an application and ask models for data and send to views.  In CakePHP also are mapped to URLs. If you want to access to domain.tld/products you need to create a ProductsController. In our case, I want two URLs, one for Articles and other for Categories. Create file:

And now the most complex and difficult to read code:

The property $scaffold is the most important, tell to CakePHP that this controller is Scaffolding controller.

Now for categories:

and code:

It’s done. Scaffolding it’s working. You need to access to domain.tld/articles and CakePHP does the work for you, scaffolding in action.

Scaffolding

Scaffolding List:

Scaffolding List

 

Scaffolding Edit:

Scaffolding Edit

You can browse to for categories in domain.tld/categories

Improvements

If you browse a little bit, you notice that category isn’t shown in Articles Scaffolding, only show ids. This is because the models need to now the relations between tables. Only change models to:

With $belongsTo and $hasMany properties we tell to Cake the relation with tables. Remember that if you don’t follow conventions this relation won’t work. In Articles is important the existence of category_id, with another name the relation will be more complex. You can see relations here:

https://book.cakephp.org/2.0/en/models/associations-linking-models-together.html

Finally, I show you how can use Scaffolding with CakePHP. But remember that this is a hard work for servers if you use a lot of tables and users, and is better to use CRUD instead.

0 replies

Leave a Reply

Want to join the discussion?
Feel free to contribute!

Leave a Reply

Your email address will not be published. Required fields are marked *