Tag apache

Read about the posts of tag apache

Docker is a new way to use virtual machines (someone expert that read this, not hates me, it’s a way to show what it is). Docker represents an easy step to install services on our machine without installing it. This means, is like a virtual machine using your own hardware instead of virtualizing it and where you can install things. It’s complex to explain because Docker is a half-path between your own computer and Virtual Machine.

The best way to understand what is and why use it is creates a basic example. We are web developers, the best is to create an Apache Image with PHP and execute some code.

Install Docker

Let’s try it. First, install Docker, this is important. If you don’t install the examples in this article couldn’t work!

You can download a copy of Docker here: Docker Engine installation

Install and …. continue.

Now it’s time to create containers. Docker has containers, a container is a service installed and you can pile containers to add more services. Let’s go to work and stop rare words!!

Create Image

This tutorial talks about creating an image that you can use and reuse. Time to create. Move to a new folder and create a file called Dockerfile and add the next lines:

It’s a two-line file. Simple instructions:

  • FROM chialab/php:5.6-apache: tell what docker image you want to use. I’m choosing chialab images because have a lot of libraries installed. You can choose another one if you want. Feel free, I always use it because have all I need for development. Search images here: Hub docker
  • ENV APACHE_LOG_DIR /var/www/html : Tell image internal environment variable.

Time to build. We have a simple Dockerfile and now need to build our image, open the terminal window and move to the Dockerfile folder and execute the command:

We built an apache image, execute the next command to see your images:

Use Image

Now it’s time to use it. Then, create an index.php page with phpinfo() instructions.

Only one more step and we are done. Time to execute the magic command:

What’s the meaning of commands?

  • docker run: tells to execute image
  • -v: is for mount volumes. I’m telling that folder $PWD (it’s system variable for actual folder) maps to /var/www/html inside image
  • -p: map port 80 on our computer to port 80 in an image.
  • apache: Docker image name

If you aren’t using Mac Os X or any Linux based OS you can change $PWD for another folder:

And finally, open your browser and write https://localhost You will see a phpinfo() information:

docker-phpinfo

You are running a web server now with apache. Thanks to docker it’s easy to create environments without installing any software on our computers.

This article is dedicated to Alex, that asks 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 accesses the URL and execute the code, a huge process begins asking for the database and constructing the CRUD from zero.

Exist a lot of frameworks with Scaffolding in PHP, but I prefer CakePHP by its 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 doesn’t support Scaffolding, they remove it in the 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 records.
  • 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 others from categories of articles. Something simple.

I followed the 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 to download or use git. I prefer git but maybe you want to 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 it directly from GitHub. Follow the next link and click the green button called Clone Or Download and then click Download ZIP. Decompress the file in a directory and continue.

Github Cake PHP

 

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:

Book Cake PHP Installation

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 it with your data (is important that uncomment utf-8 if you use accents):

A configured database, the 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 the 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 the other for Categories. Create file:

And now the most complex and difficult to read code:

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

Now for categories:

and code:

It’s done. Scaffolding it’s working. You need to access the 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 for categories in the 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 know 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:

Book CakePHP Models

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