Table Of ContentYii2 By Example
Table of Contents
Yii2 By Example
Credits
About the Author
About the Reviewers
www.PacktPub.com
Support files, eBooks, discount offers, and more
Why subscribe?
Free access for Packt account holders
Preface
What this book covers
What you need for this book
Who this book is for
Conventions
Reader feedback
Customer support
Downloading the example code
Errata
Piracy
Questions
1. Starting with Yii2
Requirements and tools
Installing Yii2 with Composer
Application structure
Application properties
Common application components
Handling application events
The MVC pattern in Yii2
Naming convention
Configuring the debug toolbar
Using the logger
Example – Hello world from scratch with the Yii basic template and bootstrap template
Summary
2. Creating a Simple News Reader
Creating Controller and Action
Creating a view to display a news list
How the controller sends data to view
Example – create a controller to display the static news items list and details using the
bootstrap template
Splitting the common view content into reusable views
Example – render partial in view
Creating static pages
Example – add a contact page
Sharing data between views and layout
Example – change the layout background based on a URL parameter
Layout with dynamic block
Example – add a dynamic box to display advertising info
Using multiple layouts
Example – using different layouts to create responsive and nonresponsive content layout
for the same view
Summary
3. Making Pretty URLs
Using pretty URLs
Custom URL rules
Example – list news items by year or category
Default parameters in rules
Example – the index page to display the links list
The complete URL rule parameters
The URL pattern to support the multilanguage view
Creating the rule class
Summary
4. Creating a Room through Forms
Creating a Model
Example – a Model to store room data
Using ActiveForm
Example – creating a new room from the HTML form
Format date, time, and numbers
Uploading files
Example – uploading an image of a room
Summary
5. Developing a Reservation System
Configuring a DB connection
Example – creating rooms, customers, and reservations tables
Example – test connection and executing the SQL query
Using Gii to create room, customer, and reservation models
Using ActiveRecord to manipulate data
Example – query rooms list with ActiveRecord
Working with relationships
Example – using a relationship to connect rooms, reservations, and customers
How to save a model from a form
Example – creating and updating a room from a form
Setting up the GMT time zone
Using multiple database connections
Example – configuring a second DB connection to export data to a local SQLite DB
Summary
6. Using a Grid for Data and Relations
Introduction
DataProvider for grids
Using a grid
Custom columns in a grid
Example – displaying a reservations list by clicking on a customer grid row
Filters in GridView
Displaying and filtering ActiveRecord relational data in a grid's column
A summarized footer row in a grid
Example – extending GridView to customize the footer row in a grid
Multiple grids on one page
Example: managing the reservations and rooms grids in the same view
Summary
7. Working on the User Interface
Using Gii to generate CRUD
Example – using CRUD to manage rooms, reservations, and customers using Gii
Customize JavaScript and CSS
Example – using JavaScript and CSS to display advertising columns that disappear if not
enough space is available
Using AJAX
Example – reservation details loaded from the customers' drop-down lists
Using the Bootstrap widget
Example: using datepicker
Multiple models in the same view
Example – saving multiple customers at the same time
Saving linked models in the same view
Example – creating a customer and reservation in the same view
Summary
8. Log in to the App
Creating a user login
Example – a login form to access
Configuring user authorization
Example – creating an ACF to authorize the users
RBAC
Example – configuring RBAC to set permissions for users
Mixing ACF and RBAC
Example – managing users' roles to access rooms, reservations, and customers
Summary
9. Frontend to Display Rooms to Everyone
Using an advanced template to split frontend and backend
Configuring an application using init
Example – creating frontend for public access
Sharing ActiveRecord models among applications
Example – displaying available rooms in the frontend site
Customizing a URL in the advanced template
Example – using the advanced template in the same domain
How to use the advanced template in the shared hosting
Summary
10. Localize the App
Setting the default language
File-based translations
Example – using file-based translation for the entire website
Placeholders formatting
DB-based translations
Example – translating room descriptions using DB
Summary
11. Creating an API for Use in a Mobile App
Configuring a REST app in the advanced template
Creating a controller
Example – creating a controller to manage rooms
Authentication
Example – using authentication to get a customers list
New controller action
Example – getting a rooms list for a reservation
Customizing authentication and response
Example – status response node in data received
Other forms of export – RSS
Example – creating an RSS with a list of available rooms
Summary
12. Create a Console Application to Automate the Periodic Task
Interacting with console applications
Creating a console controller
Example – setting an alarm flag for expired reservation
Formatting the output from the console
Implementing and executing cron jobs
Example – sending an e-mail with new reservations of the day
Summary
13. Final Refactoring
Creating widgets
Example – creating a widget with a carousel
Creating components
Example – creating a component that creates a backup of the MySQL database and
sends an e-mail to the administrator
Creating modules
Generating an API documentation
Example – using an API documentation to generate a doc of app and services
Summary
Index
Yii2 By Example
Yii2 By Example
Copyright © 2015 Packt Publishing
All rights reserved. No part of this book may be reproduced, stored in a retrieval system, or
transmitted in any form or by any means, without the prior written permission of the publisher,
except in the case of brief quotations embedded in critical articles or reviews.
Every effort has been made in the preparation of this book to ensure the accuracy of the
information presented. However, the information contained in this book is sold without
warranty, either express or implied. Neither the author, nor Packt Publishing, and its dealers
and distributors will be held liable for any damages caused or alleged to be caused directly or
indirectly by this book.
Packt Publishing has endeavored to provide trademark information about all of the companies
and products mentioned in this book by the appropriate use of capitals. However, Packt
Publishing cannot guarantee the accuracy of this information.
First published: September 2015
Production reference: 1230915
Published by Packt Publishing Ltd.
Livery Place
35 Livery Street
Birmingham B3 2PB, UK.
ISBN 978-1-78528-741-1
www.packtpub.com
Credits
Author
Fabrizio Caldarelli
Reviewers
Tristan Bendixen
Samuel Liew
Acquisition Editor
Vivek Anantharaman
Content Development Editor
Anand Singh
Technical Editor
Vivek Arora
Copy Editors
Ameesha Smith-Green
Laxmi Subramanian
Project Coordinator
Mary Alex
Proofreader
Safis Editing
Indexer
Tejal Soni
Production Coordinator
Manu Joseph
Cover Work
Manu Joseph
About the Author
Fabrizio Caldarelli is an Italian programmer who started his professional career in his youth
by programming with desktop-oriented languages, the first being Visual Basic. From the year
2000 onward, he spent 5 years developing software to manage radio broadcasts. During that
period, he studied C#.NET to make porting of all software versus this new platform.
During the same period, he learned web programming, HTML, and ASP, and in 2003, he
began to develop software using PHP as the default programming language for web pages.
During those years, he collaborated as a teacher for PHP programming courses with
http://www.html.it/, an important online reference for developers in Italy.
In 2008, he added new skills to his experience by starting to develop mobile projects for Nokia
devices with Symbian C++, and a few years later, he started working on projects for iOS,
Android, and naturally Windows phone.
After many PHP-based web projects, in late 2012, he moved on to the Yii framework as his
primary framework for developing web applications.
Since then, he has built many important projects based on Yii 1 and later on Yii 2, day by day
discovering the powerful improvement that Yii provides to getting work done.
Now he lives in Sacrofano, a small town near Rome, with his wife, Serena.
I want to thank Erika Accili for supporting me during the writing and organization of this book.
I also want to thank my wife, Serena, for sustaining me during all the work, and for the rest of
her life indeed!
About the Reviewers
Tristan Bendixen is currently pursuing a master's degree as a software engineer, having been
passionate about programming for most of his life. He has worked as a developer on diverse
projects, ranging from commercial and corporate websites to mobile phone apps and desktop
applications.
He continues to work as a software developer alongside his studies, on paid projects, as well
as some open source ones, which he helps with when time permits.
I would like to thank my beloved mother and younger brother for their love and support in my
constant endeavors to become a better developer, and my friends at Aalborg University for
being awesome sparring partners on projects and classes alike.
Samuel Liew is a full-stack web developer who enjoys producing solutions with interesting
and challenging requirements. He has experience of developing a diverse range of websites,
such as governmental sites, public utilities, real estate, investor relations, contests, touchscreen
kiosks, iPad feedback apps, blogs and magazines, and media news. He has also been involved
with creating two proprietary content management systems using C#.NET/MongoDB and
PHP/Yii/MySQL. His latest accomplishment is the development of a microstock photography
website (http://vivistock.com) using the Yii Framework, which involves e-commerce
transactions and implements heavy business logic.