Yii2 Starter Kit Application Template

Installs: 5 268

Dependents: 0

Stars: 412

Watchers: 109

Forks: 216

Open Issues: 10

Type: project

2.0.2 2015-10-28 18:53 UTC


Packagist Packagist PayPal donate button Dependency Status

This is Yii2 start application template.

It was created and developing as a fast start for building an advanced sites based on Yii2.

It covers typical use cases for a new project and will help you not to waste your time doing the same work in every project

Before you start

Hi everyone, I have spent a lot of time developing and helping you to implement Starter Kit, it was exciting and very useful experience, but as you probably know, work on open source projects are not paid by anyone, but takes away a lot of time that you could spend on earning money :-) So I went up to a situation where I need your help to continue working on this project. This assistance can be expressed in three ways:

BTW, helping me in this project, you will help me in creating [yii2-ecommerce-kit][( Thanks in advance, happy coding!





administrator role account

Login: webmaster
Password: webmaster

manager role account

Login: manager
Password: manager

user role account

Login: user
Password: user


  • Beautiful and open source dashboard theme for backend AdminLTE 2
  • Translations: English, Spanish, Russian, Ukrainian
  • Translations Editor
  • Language change action + behavior to choose locale based on browser preferred language
  • Sign in, Sign up, profile(avatar, locale, personal data) etc
  • OAuth authorization
  • User management
  • RBAC with predefined guest, user, manager and administrator roles
  • RBAC migrations support
  • Content management components: articles, categories, static pages, editable menu, editable carousels, text blocks
  • Key-value storage component
  • Application settings form (based on KeyStorage component)
  • Ready-to-go RESTful API module
  • File storage component + file upload widget
  • On-demand thumbnail creation trntv/yii2-glide
  • Useful behaviors (GlobalAccessBehavior, CacheInvalidateBehavior, MaintenanceBehavior)
  • Yii2 log web interface
  • Application timeline component
  • Cache web controller
  • Maintenance mode component (more)
  • System information web interface
  • dotenv support
  • ExtendedMessageController with ability to replace source code language and migrate messages between message sources
  • Aceeditor widget
  • Datetimepicker widget,
  • Imperavi Reactor Widget,
  • Elfinder Extension
  • Xhprof Debug panel
  • Extended IDE autocompletion
  • Nginx config example
  • Test-ready
  • Docker support
  • Vagrant support
  • Assets compression and concatenation
  • Some useful shortcuts
  • many other features i'm lazy to write about :-)

Application Components


If you want to store application messages in DB and to have ability to edit them from backend, run:

php console/yii message/migrate @common/config/messages/php.php @common/config/messages/db.php

it will copy all existing messages to database

Then uncomment config for DbMessageSource in



Key storage is a key-value storage to store different information. Application settings for example. Values can be stored both via api or by backend CRUD component.

Yii::$app->keyStorage->set('articles-per-page', 20);
Yii::$app->keyStorage->get('articles-per-page'); // 20

Maintenance mode

Starter kit has built-in component to provide a maintenance functionality. All you have to do is to configure maintenance component in your config

'bootstrap' => ['maintenance'],
'components' => [
    'maintenance' => [
        'class' => 'common\components\maintenance\Maintenance',
        'enabled' => Astronomy::isAFullMoonToday()

This component will catch all incoming requests, set proper response HTTP headers (503, "Retry After") and show a maintenance message. Additional configuration options can be found in a corresponding class.

Starter kit configured to turn on maintenance mode if frontend.maintenance key in KeyStorage is set to true

Command Bus

In Starter Kit Command Bus pattern is implemented with tactician package and it's yii2 connector - yii2-tactician

Command are stored in common/commands/command directory, handlers in common/commands/handler

To execute command run

$sendEmailCommand = new SendEmailCommand(['to' => '', 'body' => 'Hello User!']);

Timeline (Activity)

$addToTimelineCommand = new AddToTimelineCommand([
    'category' => 'user', 
    'event' => 'signup', 
    'data' => ['foo' => 'bar']


 public function behaviors()
     return [
             'class' => `common\behaviors\CacheInvalidateBehavior`,
             'tags' => [
                       return "tag-{$model->id}"
             'keys' => [
                      return "key-{$model->id}"

Add in your application config:

'as globalAccess'=>[
                'allow' => true,
                'roles' => ['?'],
                'allow' => true,
                'roles' => ['@'],
                'allow' => true,
                'roles' => ['?', '@'],
                'allow' => true,
                'roles' => ['@']

It will allow access to you application only for authentificated users.

Widgets configurable from backend

  1. Create carousel in backend
  2. Use it:
<?php echo DbCarousel::widget(['key' => 'key-from-backend']) ?>
  1. Create text block in backend
  2. Use it:
<?php echo DbText::widget(['key' => 'key-from-backend']) ?>
  1. Create text block in backend
  2. Use it:
<?php echo DbMenu::widget(['key' => 'key-from-backend']) ?>



      'class' => '\common\grid\EnumColumn',
      'attribute' => 'status',
      'enum' => User::getStatuses() // [0=>'Deleted', 1=>'Active']


Starter Kit has fully configured and ready-to-go REST API module. You can access it on


common\base\MultiModel - class for handling multiple models in one In controller:

$model = new MultiModel([
    'models' => [
        'user' => $userModel,
        'profile' => $userProfileModel

if ($model->load(Yii::$app->request->post()) && $model->save()) {

In view:

<?php echo $form->field($model->getModel('account'), 'username') ?>

<?php echo $form->field($model->getModel('profile'), 'middlename')->textInput(['maxlength' => 255]) ?>    


  • common\behaviors\GlobalAccessBehavior - allows to set access rules for your application in application config
  • common\behaviors\LocaleBehavior - discover user locale from browser or account settings and set it
  • common\behaviors\LoginTimestampBehavior - logs user login time
  • common\validators\JsonValidator - validates a value to be a valid json
  • common\rbac\OwnModelRule - simple rule for RBAC to check if the current user is model owner


1. Where is Gii?

Gii is available on:

How to contribute?

You can contribute in any way you want. Any help appreciated, but most of all i need help with docs (^_^)

Have any questions?

mail to



This template was created mostly for developers NOT for end users. This is a point where you can begin your application, rather than creating it from scratch. Good luck!