trntv/yii2-starter-kit

Yii2 Starter Kit Application Template

Installs: 3 970

Dependents: 0

Stars: 298

Watchers: 81

Forks: 154

Open Issues: 5

Language: PHP

2.0.0 2015-05-09 08:01 UTC

README

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

TABLE OF CONTENTS

DEMO

Frontend: http://yii2-starter-kit.terentev.net

Backend: http://backend.yii2-starter-kit.terentev.net

administrator role account

Login: webmaster
Password: webmaster

manager role account

Login: manager
Password: manager

user role account

Login: user
Password: user

FEATURES

  • 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
  • Vagrant support
  • many other features i'm lazy to write about :-)

Application Components

I18N

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

common/config/base.php

KeyStorage

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

Behaviors

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

Add in your application config:

'as globalAccess'=>[
        'class'=>'\common\behaviors\GlobalAccessBehavior',
        'rules'=>[
            [
                'controllers'=>['sign-in'],
                'allow' => true,
                'roles' => ['?'],
                'actions'=>['login']
            ],
            [
                'controllers'=>['sign-in'],
                'allow' => true,
                'roles' => ['@'],
                'actions'=>['logout']
            ],
            [
                'controllers'=>['site'],
                'allow' => true,
                'roles' => ['?', '@'],
                'actions'=>['error']
            ],
            [
                'allow' => true,
                'roles' => ['@']
            ]
        ]
    ]

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

Widgets configurable from backend

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

Widgets

Grid

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

API

Starter Kit has fully configured and ready-to-go REST API module. You can access it on http://yii2-starter-kit.dev/api/v1

MultiModel

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]) ?>    

Other

  • 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

FAQ

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 eugene@terentev.net

READ MORE

https://github.com/yiisoft/yii2/blob/master/apps/advanced/README.md https://github.com/yiisoft/yii2/tree/master/docs

NOTE

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!