Search icon CANCEL
Subscription
0
Cart icon
Your Cart (0 item)
Close icon
You have no products in your basket yet
Save more on your purchases! discount-offer-chevron-icon
Savings automatically calculated. No voucher code required.
Arrow left icon
Explore Products
Best Sellers
New Releases
Books
Videos
Audiobooks
Learning Hub
Newsletter Hub
Free Learning
Arrow right icon
Mastering Symfony
Mastering Symfony

Mastering Symfony: Orchestrate the designing, development, testing, and deployment of web applications with Symfony

eBook
€8.99 €26.99
Paperback
€32.99
Subscription
Free Trial
Renews at €18.99p/m

What do you get with Print?

Product feature icon Instant access to your digital eBook copy whilst your Print order is Shipped
Product feature icon Paperback book shipped to your preferred address
Product feature icon Download this book in EPUB and PDF formats
Product feature icon Access this title in our online reader with advanced features
Product feature icon DRM FREE - Read whenever, wherever and however you want
OR
Modal Close icon
Payment Processing...
tick Completed

Shipping Address

Billing Address

Shipping Methods
Table of content icon View table of contents Preview book icon Preview Book

Mastering Symfony

Chapter 2. The Request and Response Life Cycle

This chapter is a quick look at Symfony's fundamental features. We will use the request/response life cycle as a tool to discuss Model-View-Controller (MVC) in general and explore Symfony concepts such as routing, action (or controller, if you like), TWIG, Doctrine, and application setup. We will have a look at bundles and see how all of these concepts are organized in a bundle. Apart from creating a new bundle in this chapter, we will discuss the installation and how to modify and use bundles created by other developers.

The big picture

The request/response life cycle can be summarized in these two simple steps:

  1. Firstly, you send your request by entering a URL in your browser.
  2. The server then responds with a page and message (success, failure, and so on) depending on your request. End of story.

The following image shows an example of the request/response life cycle:

The big picture

A web server receives a request and passes it to an action unit for further processing. In our case, this action unit is somewhere in Symfony and is in charge of receiving requests. Depending on their type, it will fetch a resource (such as a record from the database or an image from the server's hard drive) or do something (like sending an e-mail or assembling and returning a JavaScript Object Notation (JSON) string). Finally, it renders a page based on the results and sends it back to the browser. After the job is done, this action unit marks the request and response as terminated and looks for the next request, as shown in the following...

Anatomy of a bundle

When you install Symfony (via the default installer), it comes with a very basic controller and template. That is why we can see the default Welcome! screen by visiting the following URL:

http://localhost:8000

The general folder structure for a Symfony project is as follows:

└── mava
    ├── app
    ├── bin
    ├── src
    ├── tests
    ├── var
    ├── vendor
    └── web

The folders that we are interested at the moment are src/ and app/. They contain the code and template for the Welcome! screen. In the src/ folder, we have a bundle called AppBundle with the following basic structure:

src/
└── AppBundle
    ├── AppBundle.php
    └── Controller
        └── DefaultController.php

The default controller is where the so-called handle...

Custom bundles versus AppBundle

When we use AppBundle as a code base, the app/ directory of our project can be seen as part of AppBundle. Sure, it has other files and folders that take care of other bundles available in the /vendor directory, for example, but we can benefit a lot from the app/ folder.

For example, if you look at the MyBundle/Resources folder, you will find two subfolders named Resources/config/ and Resources/views/, which hold service definitions (and other required settings in the future) and template files for that bundle.

However, with AppBundle, we already have a folder named app/, so conveniently, we can use the available app/config for our configuration needs and app/Resources/views for our templates. Using this approach, referencing these files are much easier.

Compare the render() method in indexAction() of each controller. In the AppBundle controller, we simply referenced the template file without mentioning the name of the bundle. When there is no bundle name, Symfony...

Creating templates with TWIG

Symfony has its own template engine called TWIG. It is a simple scripting language with a few tags and only three main rules:

  • Whatever goes between {% %} should be executed
  • Whatever is expressed via {{ }} should be printed
  • Whatever is enclosed by {# #} is just a comment

As we continue, we will see how to use TWIG to create sophisticated and dynamic templates based on our project needs. For now, let's just see what a TWIG file looks like.

The render() method from the previous topic has two parameters: the path to our TWIG template and its parameter. By default, all templates are in the app/Resources/views folder. If you go there, you will find another folder called default. That's why the middle part of the path parameter is default:

return $this->render('default/index.html.twig', [
      'base_dir' => realpath($this->container->getParameter('kernel.root_dir').'/..'),
]);

Obviously, in the default folder...

Creating data fixtures

Technically, a data fixture is a PHP class with a few initialized objects. In AppBundle, create this directory and file structure:

/DataFixtures/ORM/LoadUsers.php

Add the following content to our class:

<?php
// mava/src/AppBundle/DataFixtures/ORM/LoadUsers.php
namespace AppBundle\DataFixtures\ORM;
use Doctrine\Common\DataFixtures\FixtureInterface;
use Doctrine\Common\Persistence\ObjectManager;
use AppBundle\Entity\User;

class LoadUsers implements FixtureInterface
{
  public function load(ObjectManager $manager)
  {
    // todo: create and persist objects
  }
}

This is the general structure of a data fixture. As you can see, it implements FixtureInterface and has a load() method for data persistence.

All we need to do is create a few objects, set their values, and ask our object manager to persist them:

  public function load(ObjectManager $manager)
  {
    $user1 = new User();
    $user1->setName('John');
    $user1->setBio('He is a cool guy&apos...

The big picture


The request/response life cycle can be summarized in these two simple steps:

  1. Firstly, you send your request by entering a URL in your browser.

  2. The server then responds with a page and message (success, failure, and so on) depending on your request. End of story.

The following image shows an example of the request/response life cycle:

A web server receives a request and passes it to an action unit for further processing. In our case, this action unit is somewhere in Symfony and is in charge of receiving requests. Depending on their type, it will fetch a resource (such as a record from the database or an image from the server's hard drive) or do something (like sending an e-mail or assembling and returning a JavaScript Object Notation (JSON) string). Finally, it renders a page based on the results and sends it back to the browser. After the job is done, this action unit marks the request and response as terminated and looks for the next request, as shown in the following diagram...

Anatomy of a bundle


When you install Symfony (via the default installer), it comes with a very basic controller and template. That is why we can see the default Welcome! screen by visiting the following URL:

http://localhost:8000

The general folder structure for a Symfony project is as follows:

└── mava
    ├── app
    ├── bin
    ├── src
    ├── tests
    ├── var
    ├── vendor
    └── web

The folders that we are interested at the moment are src/ and app/. They contain the code and template for the Welcome! screen. In the src/ folder, we have a bundle called AppBundle with the following basic structure:

src/
└── AppBundle
    ├── AppBundle.php
    └── Controller
        └── DefaultController.php

The default controller is where the so-called handle() method passes the request and expects a response. Let's have a look in this controller:

// mava/src/AppBundle/Controller/DefaultController.php
class DefaultController extends Controller
{
  /**
   * @Route("/", name="homepage")
   */
  public function...

Custom bundles versus AppBundle


When we use AppBundle as a code base, the app/ directory of our project can be seen as part of AppBundle. Sure, it has other files and folders that take care of other bundles available in the /vendor directory, for example, but we can benefit a lot from the app/ folder.

For example, if you look at the MyBundle/Resources folder, you will find two subfolders named Resources/config/ and Resources/views/, which hold service definitions (and other required settings in the future) and template files for that bundle.

However, with AppBundle, we already have a folder named app/, so conveniently, we can use the available app/config for our configuration needs and app/Resources/views for our templates. Using this approach, referencing these files are much easier.

Compare the render() method in indexAction() of each controller. In the AppBundle controller, we simply referenced the template file without mentioning the name of the bundle. When there is no bundle name, Symfony...

Left arrow icon Right arrow icon

Key benefits

  • Create a robust and reliable Symfony development pipeline using Amazon's cloud platform
  • Cut development and maintenance costs by defining crystal clear features and possible scenarios for each feature before implementation
  • Follow detailed examples provided in each chapter to create a task management application

Description

In this book, you will learn some lesser known aspects of development with Symfony, and you will see how to use Symfony as a framework to create reliable and effective applications. You might have developed some impressive PHP libraries in other projects, but what is the point when your library is tied to one particular project? With Symfony, you can turn your code into a service and reuse it in other projects. This book starts with Symfony concepts such as bundles, routing, twig, doctrine, and more, taking you through the request/response life cycle. You will then proceed to set up development, test, and deployment environments in AWS. Then you will create reliable projects using Behat and Mink, and design business logic, cover authentication, and authorization steps in a security checking process. You will be walked through concepts such as DependencyInjection, service containers, and services, and go through steps to create customized commands for Symfony's console. Finally, the book covers performance optimization and the use of Varnish and Memcached in our project, and you are treated with the creation of database agnostic bundles and best practices.

Who is this book for?

If you are a PHP developer with some experience in Symfony and are looking to master the framework and use it to its full potential, then this book is for you. Though experience with PHP, object-oriented techniques, and Symfony basics is assumed, this book will give you a crash course on the basics and then proceed to more advanced topics.

What you will learn

  • Install and configure Symfony and required third-party bundles to develop a task management application
  • Set up a continuous integration server to orchestrate automatic builds every time you add a new feature to your project
  • Reduce maintenance costs dramatically using Behaviour Driven Development (BDD)
  • Create a slick user interface using the Bootstrap framework
  • Design robust business logic using Doctrine
  • Build a comprehensive dashboard and secure your project using the Sonata project
  • Improve performance using Redis, Memcache, and Varnish
  • Create customized Symfony commands and add them to your console
Estimated delivery fee Deliver to Luxembourg

Premium delivery 7 - 10 business days

€17.95
(Includes tracking information)

Product Details

Country selected
Publication date, Length, Edition, Language, ISBN-13
Publication date : Apr 26, 2016
Length: 290 pages
Edition : 1st
Language : English
ISBN-13 : 9781784390310
Languages :
Tools :

What do you get with Print?

Product feature icon Instant access to your digital eBook copy whilst your Print order is Shipped
Product feature icon Paperback book shipped to your preferred address
Product feature icon Download this book in EPUB and PDF formats
Product feature icon Access this title in our online reader with advanced features
Product feature icon DRM FREE - Read whenever, wherever and however you want
OR
Modal Close icon
Payment Processing...
tick Completed

Shipping Address

Billing Address

Shipping Methods
Estimated delivery fee Deliver to Luxembourg

Premium delivery 7 - 10 business days

€17.95
(Includes tracking information)

Product Details

Publication date : Apr 26, 2016
Length: 290 pages
Edition : 1st
Language : English
ISBN-13 : 9781784390310
Languages :
Tools :

Packt Subscriptions

See our plans and pricing
Modal Close icon
€18.99 billed monthly
Feature tick icon Unlimited access to Packt's library of 7,000+ practical books and videos
Feature tick icon Constantly refreshed with 50+ new titles a month
Feature tick icon Exclusive Early access to books as they're written
Feature tick icon Solve problems while you work with advanced search and reference features
Feature tick icon Offline reading on the mobile app
Feature tick icon Simple pricing, no contract
€189.99 billed annually
Feature tick icon Unlimited access to Packt's library of 7,000+ practical books and videos
Feature tick icon Constantly refreshed with 50+ new titles a month
Feature tick icon Exclusive Early access to books as they're written
Feature tick icon Solve problems while you work with advanced search and reference features
Feature tick icon Offline reading on the mobile app
Feature tick icon Choose a DRM-free eBook or Video every month to keep
Feature tick icon PLUS own as many other DRM-free eBooks or Videos as you like for just €5 each
Feature tick icon Exclusive print discounts
€264.99 billed in 18 months
Feature tick icon Unlimited access to Packt's library of 7,000+ practical books and videos
Feature tick icon Constantly refreshed with 50+ new titles a month
Feature tick icon Exclusive Early access to books as they're written
Feature tick icon Solve problems while you work with advanced search and reference features
Feature tick icon Offline reading on the mobile app
Feature tick icon Choose a DRM-free eBook or Video every month to keep
Feature tick icon PLUS own as many other DRM-free eBooks or Videos as you like for just €5 each
Feature tick icon Exclusive print discounts

Frequently bought together


Stars icon
Total €26.97 €69.97 €43.00 saved
Symfony2 Essentials
€24.99
Mastering Symfony
€32.99
Extending Symfony2 Web Application Framework
€28.99
Total €26.97€69.97 €43.00 saved Stars icon
Banner background image

Table of Contents

13 Chapters
1. Installing and Configuring Symfony Chevron down icon Chevron up icon
2. The Request and Response Life Cycle Chevron down icon Chevron up icon
3. Setting Up the Environment Chevron down icon Chevron up icon
4. Using Behavior-Driven Development in Symfony Chevron down icon Chevron up icon
5. Business Logic Chevron down icon Chevron up icon
6. Dashboard and Security Chevron down icon Chevron up icon
7. The Presentation Layer Chevron down icon Chevron up icon
8. Project Review Chevron down icon Chevron up icon
9. Services and Service Containers Chevron down icon Chevron up icon
10. Custom User Commands Chevron down icon Chevron up icon
11. More about Dev, Test and Prod Environments Chevron down icon Chevron up icon
12. Caching in Symfony Chevron down icon Chevron up icon
Index Chevron down icon Chevron up icon

Customer reviews

Rating distribution
Full star icon Full star icon Full star icon Half star icon Empty star icon 3.8
(5 Ratings)
5 star 60%
4 star 0%
3 star 0%
2 star 40%
1 star 0%
ian rust May 14, 2021
Full star icon Full star icon Full star icon Full star icon Full star icon 5
Yes, this book works with a Linux system. There is a reason for the L in the LAMP stack - Linux Apache MySQL PHP. If you claim to be a PHP developer and don't know Linux it's like saying you're a web developer but you don't know javascript... you're a full stack developer but you've never heard of the MEAN stack or the LAMP stack. Rather than blaming the book for your lack of standard knowledge, go read about UNIX, become an actual real full stack developer, and come back. Standard practice is not to set up a server in a Windows environment, 99% of servers run UNIX.Also, for the record... You don't need MacOS AND Linux. Those are 2 separate operating systems. Mac OS X is built on top of UNIX, the idea in the book is you can use either Linux or Mac OS if you are more comfortable with that (really you can use any version of UNIX). You can install Linux Mint on your machine for 0.00$ and that works too.As far as the book - it's a good book, it has the information you need to get up and running with symfony.
Amazon Verified review Amazon
Rixie Trand Aug 16, 2021
Full star icon Full star icon Full star icon Full star icon Full star icon 5
Bonjour, c'est un bon ouvrage pour maitriser le framework Symfony - notamment sur le systeme d'operation (OS) Microsoft Windows.
Amazon Verified review Amazon
scottdnz Jul 27, 2016
Full star icon Full star icon Full star icon Full star icon Full star icon 5
I found this book really helpful. It goes over a lot of topics that are covered in one place, for the first time, like the most useful Symfony bundles for setting up secure users and administering a website. I work in an agency which uses the Symfony framework frequently and the walkthroughs and tips in this book have already helped us in the last two months. If you're curious about making your PHP website better and using things like continuous integration, doctrine, caching, automated testing and Symfony services, then you'll reap plenty of benefits from this book.
Amazon Verified review Amazon
M. F. Edwards Jun 10, 2020
Full star icon Full star icon Empty star icon Empty star icon Empty star icon 2
I'm a full stack developer who has just got a new job where they want to use Symfony. I've not dealt with this before so I decided this book looked a good one to get me started. However, what the description fails to tell you is that whilst you can follow the tutorials in this book and build a system as you go, you need to have Apple OSX and Linux in order to do so!Why on earth the editor didn't pick this up before the book was published I don't know. Why write a book that only a small minority of people can easily use. Talk about aiming for the smallest possible market!I don't have the desire, the time nor the money to buy an Apple computer and then mess about installing Linux.It's a shame as the booked looked decent.I've sent it back.If you use Windows like I do, look elsewhere.
Amazon Verified review Amazon
Jorge Peralta Jul 21, 2017
Full star icon Full star icon Empty star icon Empty star icon Empty star icon 2
looks like a good book. Unfortunately, all its installation guides and execution examples are made for Unix based operating systems. As I am a windows user, doesn't work for me... I don't see anywhere up there warning you of that. regrettable.
Amazon Verified review Amazon
Get free access to Packt library with over 7500+ books and video courses for 7 days!
Start Free Trial

FAQs

What is the delivery time and cost of print book? Chevron down icon Chevron up icon

Shipping Details

USA:

'

Economy: Delivery to most addresses in the US within 10-15 business days

Premium: Trackable Delivery to most addresses in the US within 3-8 business days

UK:

Economy: Delivery to most addresses in the U.K. within 7-9 business days.
Shipments are not trackable

Premium: Trackable delivery to most addresses in the U.K. within 3-4 business days!
Add one extra business day for deliveries to Northern Ireland and Scottish Highlands and islands

EU:

Premium: Trackable delivery to most EU destinations within 4-9 business days.

Australia:

Economy: Can deliver to P. O. Boxes and private residences.
Trackable service with delivery to addresses in Australia only.
Delivery time ranges from 7-9 business days for VIC and 8-10 business days for Interstate metro
Delivery time is up to 15 business days for remote areas of WA, NT & QLD.

Premium: Delivery to addresses in Australia only
Trackable delivery to most P. O. Boxes and private residences in Australia within 4-5 days based on the distance to a destination following dispatch.

India:

Premium: Delivery to most Indian addresses within 5-6 business days

Rest of the World:

Premium: Countries in the American continent: Trackable delivery to most countries within 4-7 business days

Asia:

Premium: Delivery to most Asian addresses within 5-9 business days

Disclaimer:
All orders received before 5 PM U.K time would start printing from the next business day. So the estimated delivery times start from the next day as well. Orders received after 5 PM U.K time (in our internal systems) on a business day or anytime on the weekend will begin printing the second to next business day. For example, an order placed at 11 AM today will begin printing tomorrow, whereas an order placed at 9 PM tonight will begin printing the day after tomorrow.


Unfortunately, due to several restrictions, we are unable to ship to the following countries:

  1. Afghanistan
  2. American Samoa
  3. Belarus
  4. Brunei Darussalam
  5. Central African Republic
  6. The Democratic Republic of Congo
  7. Eritrea
  8. Guinea-bissau
  9. Iran
  10. Lebanon
  11. Libiya Arab Jamahriya
  12. Somalia
  13. Sudan
  14. Russian Federation
  15. Syrian Arab Republic
  16. Ukraine
  17. Venezuela
What is custom duty/charge? Chevron down icon Chevron up icon

Customs duty are charges levied on goods when they cross international borders. It is a tax that is imposed on imported goods. These duties are charged by special authorities and bodies created by local governments and are meant to protect local industries, economies, and businesses.

Do I have to pay customs charges for the print book order? Chevron down icon Chevron up icon

The orders shipped to the countries that are listed under EU27 will not bear custom charges. They are paid by Packt as part of the order.

List of EU27 countries: www.gov.uk/eu-eea:

A custom duty or localized taxes may be applicable on the shipment and would be charged by the recipient country outside of the EU27 which should be paid by the customer and these duties are not included in the shipping charges been charged on the order.

How do I know my custom duty charges? Chevron down icon Chevron up icon

The amount of duty payable varies greatly depending on the imported goods, the country of origin and several other factors like the total invoice amount or dimensions like weight, and other such criteria applicable in your country.

For example:

  • If you live in Mexico, and the declared value of your ordered items is over $ 50, for you to receive a package, you will have to pay additional import tax of 19% which will be $ 9.50 to the courier service.
  • Whereas if you live in Turkey, and the declared value of your ordered items is over € 22, for you to receive a package, you will have to pay additional import tax of 18% which will be € 3.96 to the courier service.
How can I cancel my order? Chevron down icon Chevron up icon

Cancellation Policy for Published Printed Books:

You can cancel any order within 1 hour of placing the order. Simply contact customercare@packt.com with your order details or payment transaction id. If your order has already started the shipment process, we will do our best to stop it. However, if it is already on the way to you then when you receive it, you can contact us at customercare@packt.com using the returns and refund process.

Please understand that Packt Publishing cannot provide refunds or cancel any order except for the cases described in our Return Policy (i.e. Packt Publishing agrees to replace your printed book because it arrives damaged or material defect in book), Packt Publishing will not accept returns.

What is your returns and refunds policy? Chevron down icon Chevron up icon

Return Policy:

We want you to be happy with your purchase from Packtpub.com. We will not hassle you with returning print books to us. If the print book you receive from us is incorrect, damaged, doesn't work or is unacceptably late, please contact Customer Relations Team on customercare@packt.com with the order number and issue details as explained below:

  1. If you ordered (eBook, Video or Print Book) incorrectly or accidentally, please contact Customer Relations Team on customercare@packt.com within one hour of placing the order and we will replace/refund you the item cost.
  2. Sadly, if your eBook or Video file is faulty or a fault occurs during the eBook or Video being made available to you, i.e. during download then you should contact Customer Relations Team within 14 days of purchase on customercare@packt.com who will be able to resolve this issue for you.
  3. You will have a choice of replacement or refund of the problem items.(damaged, defective or incorrect)
  4. Once Customer Care Team confirms that you will be refunded, you should receive the refund within 10 to 12 working days.
  5. If you are only requesting a refund of one book from a multiple order, then we will refund you the appropriate single item.
  6. Where the items were shipped under a free shipping offer, there will be no shipping costs to refund.

On the off chance your printed book arrives damaged, with book material defect, contact our Customer Relation Team on customercare@packt.com within 14 days of receipt of the book with appropriate evidence of damage and we will work with you to secure a replacement copy, if necessary. Please note that each printed book you order from us is individually made by Packt's professional book-printing partner which is on a print-on-demand basis.

What tax is charged? Chevron down icon Chevron up icon

Currently, no tax is charged on the purchase of any print book (subject to change based on the laws and regulations). A localized VAT fee is charged only to our European and UK customers on eBooks, Video and subscriptions that they buy. GST is charged to Indian customers for eBooks and video purchases.

What payment methods can I use? Chevron down icon Chevron up icon

You can pay with the following card types:

  1. Visa Debit
  2. Visa Credit
  3. MasterCard
  4. PayPal
What is the delivery time and cost of print books? Chevron down icon Chevron up icon

Shipping Details

USA:

'

Economy: Delivery to most addresses in the US within 10-15 business days

Premium: Trackable Delivery to most addresses in the US within 3-8 business days

UK:

Economy: Delivery to most addresses in the U.K. within 7-9 business days.
Shipments are not trackable

Premium: Trackable delivery to most addresses in the U.K. within 3-4 business days!
Add one extra business day for deliveries to Northern Ireland and Scottish Highlands and islands

EU:

Premium: Trackable delivery to most EU destinations within 4-9 business days.

Australia:

Economy: Can deliver to P. O. Boxes and private residences.
Trackable service with delivery to addresses in Australia only.
Delivery time ranges from 7-9 business days for VIC and 8-10 business days for Interstate metro
Delivery time is up to 15 business days for remote areas of WA, NT & QLD.

Premium: Delivery to addresses in Australia only
Trackable delivery to most P. O. Boxes and private residences in Australia within 4-5 days based on the distance to a destination following dispatch.

India:

Premium: Delivery to most Indian addresses within 5-6 business days

Rest of the World:

Premium: Countries in the American continent: Trackable delivery to most countries within 4-7 business days

Asia:

Premium: Delivery to most Asian addresses within 5-9 business days

Disclaimer:
All orders received before 5 PM U.K time would start printing from the next business day. So the estimated delivery times start from the next day as well. Orders received after 5 PM U.K time (in our internal systems) on a business day or anytime on the weekend will begin printing the second to next business day. For example, an order placed at 11 AM today will begin printing tomorrow, whereas an order placed at 9 PM tonight will begin printing the day after tomorrow.


Unfortunately, due to several restrictions, we are unable to ship to the following countries:

  1. Afghanistan
  2. American Samoa
  3. Belarus
  4. Brunei Darussalam
  5. Central African Republic
  6. The Democratic Republic of Congo
  7. Eritrea
  8. Guinea-bissau
  9. Iran
  10. Lebanon
  11. Libiya Arab Jamahriya
  12. Somalia
  13. Sudan
  14. Russian Federation
  15. Syrian Arab Republic
  16. Ukraine
  17. Venezuela