This chapter is merely a refresher for those who are pretty confident in using Symfony and an introduction for those who are quick learners! You can expect to read about how to install the Symfony Standard Edition package and manage its dependencies via Composer. After installation, we will check to make sure that everything is configured properly. The following are the main topics that we will talk about in this chapter:
Using Composer and Packagist
Checking the installation
Running a PHP built-in web server
I don't like to talk about features, numbers, and statistics. I don't do detailed comparisons between frameworks as well. Instead, I'd like to share an experience with you. As a PHP developer, I worked for the New Zealand Herald newspaper for a while. Sure, they are not the oldest newspaper in the world, but in 2013, they celebrated their 150th anniversary, which makes it very clear that over the years, they have created layers and layers of code on top of each other and used or tried almost every framework and technology in their website and internal newspaper systems. Their repositories contain tons of legacy codes written in different languages. You won't believe it if I say different parts of their system were implemented in Perl, Java, C#, ColdFusion, and PHP, and there was (perhaps, still is?) an API layer that acts as a communicating bridge between all of them.
Due to many factors such as maintenance costs, in the past few years, people at the NZ Herald decided to migrate their entire applications and services into one integrated system; something that is reliable, efficient, and easy to expand and maintain. Having experienced many frameworks already, the solution architects at NZ Herald chose Symfony as their framework.
They realized that those colorful graphs and pretty pictures that compare benchmarking results for various frameworks are worth nothing when it comes to real-life problems. They experienced the efficiency of various frameworks in the day-to-day challenges and understood that no matter how fast the development speed might look at the beginning, the most important thing is how reliable it actually is and how much it costs when it comes to maintaining the project. They simply put a price tag on many factors including performance, abstraction, decouplement, portability, integration, and above all, how well organized the code base will be after spending several years and using several men for the development. Guess what? Symfony beat every PHP framework out there.
What I'm trying to say is that Symfony is not just another tool for web app or website development. It is a new culture for web development, a solid reliable foundation that you can build your project on top of with peace of mind. I call it a new culture because for the first time, I see that it has made various PHP communities talk to each other and work together. I believe this is the most important PHP achievement ever. In the years to come, we will see more about this movement.
I believe one of the main reasons why Symfony stands out of the crowd is the way it defines the Model-View-Controller (MVC) design pattern. This is the key: Symfony defines MVC while many other frameworks try to simply follow MVC rules. Can you see the difference? This means that Symfony contains MVC but does not constrain it. Have a look at the MVC definition and keep it in mind that as we continue the journey through the chapters of this book, you will see what I mean by this. Maybe, this is reason that other PHP frameworks and Content Management Systems (CMS) adapted the Symfony components and started to follow in its footsteps.
For those who concern themselves with performance and their judgment is blinded by Hello World benchmarking results, I can talk about large companies such as BBC, CBS, and many others who chose Symfony.
Please don't tell me that these big boys didn't do due diligence before making a big decision like choosing a framework. They know the amount of pressure their website receives on a hourly basis and they do care about the quality of their service. There must be a good reason that they chose Symfony over other frameworks. In a nutshell, Symfony helps have a better organized code that reduces the maintenance costs tremendously and, at the same time, it can benefit from modern caching systems such as Varnish, which help with a better performance. Chapter 12, Caching in Symfony is all about performance improvement and caching systems.
In December 2013, when Fabien Potencier—the creator of Symfony—announced that he raised seven million dollars to boost Symfony and its ecosystem, I literally dropped other frameworks and decided to invest and focus even more on Symfony.
It is clear to me if he was capable of making his mark without raising money, then from 2014 onwards, he will be able to make a huge impact on the PHP world.
Don't get me wrong; I've been using other frameworks and respect other teams who made an effort to create a web development tool with PHP. I have used famous frameworks such as Zend to domestic packages such as MySource Matrix and SilverStripe. As a hobbyist, I also try new libraries and ideas in the open source world. However, every PHP developer needs to choose a right direction and set of tools as his main weapon. For me, it is Symfony, and I can see that Symfony developers will be in even higher demand soon.
Assuming that you are an experienced PHP developer and familiar with open source development, the tutorials in this book are provided for Linux and Mac platforms. I politely invite Windows users to install a VM application such as Oracle VirtualBox and any Linux distribution to follow the provided examples. You can download it from https://www.virtualbox.org/.
Download the archive file in the root of our project and unpack it there
Clone the project from GitHub
Use the Symfony installer tool
Use Composer to install it for us
The easiest way is to download the Symfony installer and make it publicly accessible via the following commands:
$ sudo curl -LsS https://symfony.com/installer -o /usr/local/bin/symfony $ sudo chmod a+x /usr/local/bin/symfony
Now create a new project simply by running the following command:
$ symfony new mava
As this command shows, it will ask the Symfony installer to create a new folder in the current path called
mava, and when you hit enter, you will see that the Symfony source code will be downloaded to that folder:
If you don't mention a version number or branch name in the installer command, it downloads and installs the latest stable version of Symfony.
In the list of things that we can do after installation is running the application immediately, without installing a virtual host. Thanks to the PHP built-in web server, we can run it via Symfony's console and browse the mava app at port
8000 on localhost:
$ bin/console server:run
The following screenshot shows how
http://localhost:8000 looks like in your favourite browser:
Downloading the example code
You can download the example code files for this book from your account at http://www.packtpub.com. If you purchased this book elsewhere, you can visit http://www.packtpub.com/support and register to have the files e-mailed directly to you.
You can download the code files by following these steps:
Log in or register to our website using your e-mail address and password.
Hover the mouse pointer on the SUPPORT tab at the top.
Click on Code Downloads & Errata.
Enter the name of the book in the Search box.
Select the book for which you're looking to download the code files.
Choose from the drop-down menu where you purchased this book from.
Click on Code Download.
You can also download the code files by clicking on the Code Files button on the book's webpage at the Packt Publishing website. This page can be accessed by entering the book's name in the Search box. Please note that you need to be logged in to your Packt account.
Once the file is downloaded, please make sure that you unzip or extract the folder using the latest version of:
WinRAR / 7-Zip for Windows
Zipeg / iZip / UnRarX for Mac
7-Zip / PeaZip for Linux
Composer is a dependency manager application that can be used to install PHP packages.
Some developers prefers Composer, not just because it is easy to use, but it is far more efficient when it comes to keeping track of the project dependencies. In fact, the main reason for creating Composer was to provide a reliable and consistent environment to develop PHP projects.
Imagine a team of PHP developers who work on the same project using various libraries and resources. Sometimes, it can be a nightmare if updating an existing library or installing a new one crashes the code of another developer in the team. Someone should be in charge of tracking all dependencies and controlling the updates and installs to make sure that the project development runs smoothly. In the past, that person used to be the lead developer, but thanks to Composer, the dependency management during development, staging, and production phases is handled automatically by Composer.
Let's get started by downloading Composer if you don't have it already:
$ curl -sS https://getcomposer.org/installer | php
I presume that you have already installed the latest stable version of PHP and required extensions and libraries including curl. In case you don't have curl, you can install Composer via the following command:
$ php -r "readfile('https://getcomposer.org/installer');" | php
Move it to your
/usr/local/bin folder so that it is accessible from everywhere in your machine:
$ sudo mv composer.phar /usr/local/bin/composer
Depending on the distribution of your Linux, this path might be
/usr/bin instead. Use the
echo $PATH command to find out about the location.
Composer is just a manager. It does not store any libraries or packages in itself. However, it works very closely with a package repository called Packagist to make sure that it gets the right packages with the correct dependencies. To do so, Packagist talks to Composer via a configuration file called
composer.json, which contains many settings including dependency information.
Symfony Standard Edition is a package saved in https://packagist.org/. Go to the website and search
symfony and you will see the Symfony framework along with a list of Symfony components as the search result:
$ composer create-project [package] [/path] [version]: This creates a brand new project by downloading a specific version of a package to the specified directory
$ composer install: This installs a package and fetches all the dependent packages to your project
$ composer update: This updates the current packages
Let's see how to install the Symfony Standard Edition package via Composer.
Did you know that with the self-update option, you can upgrade the Composer to the latest stable version?
$ composer self-update
$ cd /var/www $ sudo mkdir mava $ sudo chown -hR <YourUserName>:<YourUserName> mava
Now type the following command:
$ composer create-project symfony/symfony mava/
As you can see in the following image, version 3.0.1 is the latest stable version. We can always choose a long-term support version if we want to take a conservative approach toward a project or we can choose the development version if we are crazy enough to ask for everything cutting-edge. Normal people like me always choose the latest stable version. In other words, it is a trade-off between the latest features and longest support:
If the installation process runs smoothly, you will see a bunch of packages being downloaded and installed to the
Using version ^3.0 for symfony/symfony ./composer.json has been updated Loading composer repositories with package information Updating dependencies (including require-dev) - Installing psr/log (1.0.0) Loading from cache - Installing doctrine/lexer (v1.0.1) Loading from cache - Installing doctrine/annotations (v1.2.7) Loading from cache - Installing doctrine/collections (v1.3.0) Loading from cache - Installing doctrine/cache (v1.6.0) Loading from cache - Installing doctrine/inflector (v1.1.0) Loading from cache - Installing doctrine/common (v2.6.1) Loading from cache etc...
After Composer has finished downloading and unpacking all the dependencies, it will ask a couple of questions including sample demo, database settings, and mailer settings. Just accept the default answer by pushing Enter:
Creating the "app/config/parameters.yml" file Some parameters are missing. Please provide them. database_driver (pdo_mysql): database_host (127.0.0.1): database_port (null): database_name (symfony): database_user (root): database_password (null): mailer_transport (smtp): mailer_host (127.0.0.1): mailer_user (null): mailer_password (null): locale (en): secret (ThisTokenIsNotSoSecretChangeIt): debug_toolbar (true): debug_redirects (false): use_assetic_controller (true):
These settings will be saved in the
app/config/parameters.yml file, and we always have a chance to change them later. If everything was okay, at the end, the cache will be cleared and the default assets will be installed as follows:
If you are concerned about how long your choice of the Symfony version is going to be supported, visit the http://symfony.com/roadmap page, scroll down, enter the version number, and push the Check button. You will see a detailed description about the support duration:
$ bin/console server:run
Then, visit the following link in your browser:
If you see the following image, then you are good to go. You can ignore the suggested recommendations for now:
In this chapter, we read about the practicality of Symfony and the basic reasons why big companies are using it. We read about the Symfony road map and its potential. We ran the built-in web server to be able to see our Symfony instance. We saw how to use Composer to install Symfony and how to check the installation afterward.
In the next chapter, I will walk you through the request/response life cycle and show you how to use Symfony to generate code and shape it based on your needs.