Book Image

Yii2 Application Development Cookbook - Third Edition

By : Sergey Ivanov, Andrew Bogdanov, Dmitry Eliseev
Book Image

Yii2 Application Development Cookbook - Third Edition

By: Sergey Ivanov, Andrew Bogdanov, Dmitry Eliseev

Overview of this book

Yii is a free, open source web application development framework written in PHP5 that promotes clean DRY design and encourages rapid development. It works to streamline your application development time and helps to ensure an extremely efficient, extensible, and maintainable end product. Being extremely performance optimized, Yii is a perfect choice for any size project. However, it has been built with sophisticated, enterprise applications in mind. You have full control over the configuration from head-to-toe (presentation-to-persistence) to conform to your enterprise development guidelines. It comes packaged with tools to help test and debug your application, and has clear and comprehensive documentation. This book is a collection of Yii2 recipes. Each recipe is represented as a full and independent item, which showcases solutions from real web-applications. So you can easily reproduce them in your environment and learn Yii2 fast and without tears. All recipes are explained with step-by-step code examples and clear screenshots. Yii2 is like a suit that looks great off the rack, but is also very easy to tailor to fit your needs. Virtually every component of the framework is extensible. This book will show how to use official extensions, extend any component, or write a new one. This book will help you create modern web applications quickly, and make sure they perform well using examples and business logic from real life. You will deal with the Yii command line, migrations, and assets. You will learn about role-based access, security, and deployment. We’ll show you how to easily get started, configure your environment, and be ready to write web applications efficiently and quickly.
Table of Contents (19 chapters)
Yii2 Application Development Cookbook Third Edition
About the Authors
About the Reviewer

Code generation

Yii2 provides the powerful module Gii to generate models, controllers, and views, which you can easily modify and customize. It's a really helpful tool for fast and quick development.

In this section we will explore how to use Gii and generate code. For example you have a database with one table named film and you would like to create an application with CRUD operations for this table. It's easy.

Getting ready

  1. Create a new application by using composer as described in the official guide at

  2. Download the Sakila database from

  3. Execute the downloaded SQLs: first the schema then the data.

  4. Configure the database connection in config/main.php to use the Sakila database.

  5. Run your web-server by ./yii serve.

How to do it…

  1. Go to http://localhost:8080/index.php?r=gii and select Model Generator.

  2. Fill out Table Name as actor and Model Class as Actor and press button Generate at the bottom of page.

  3. Return tothe main Gii menu by clicking the yii code generator logo on the header and choose CRUD Generator.

  4. Fill out the Model Class field as app\models\Actor and Controller Class as app\controllers\ActorController.

  5. Press the Preview button at the bottom of page and then press green button Generate.

  6. Check the result via http://localhost:8080/index.php?actor/create.

How it works…

If you check your project structure you will see autogenerated code:

Firstly we've created an Actor model. Gii automatically creates all model rules which depends on mysql field types. For example, if in your MySQL actor table's fields first_name and last_name have IS NOT NULL flag then Yii automatically creates rule for it required and sets max length 45 symbols because in our database max length of this field is set up as 45.

public function rules()
    return [
        [['first_name', 'last_name'], 'required'],
        [['last_update'], 'safe'],
        [['first_name', 'last_name'], 'string', 'max' => 45],

Also Yii creates relationship between models automatically, based on foreign keys you added to your database. In our case two relations were created automatically.

public function getFilmActors()
    return $this->hasMany(FilmActor::className(), ['actor_id' => 'actor_id']);

public function getFilms()
    return $this->hasMany(Film::className(), ['film_id' => 'film_id'])->viaTable('film_actor', ['actor_id' => 'actor_id']);

This relationship has been created because we have two foreign keys in our database. The film_actor table has foreign key fk_film_actor_actor which points to actor table fields actor_id and fk_film_actor_film which points to film table field film_id.

Notice that you haven't generated FilmActor model yet. So if you would develop full-app versus demo you had to generate Film, FilmActor models also. For the rest of the pieces, refer to