2017 © Pedro Peláez
 

project yii2-one-domain-starter-kit

Yii2 One Domain Starter Kit Application Template

image

matih/yii2-one-domain-starter-kit

Yii2 One Domain Starter Kit Application Template

  • Monday, June 13, 2016
  • by matih
  • Repository
  • 3 Watchers
  • 3 Stars
  • 39 Installations
  • PHP
  • 0 Dependents
  • 0 Suggesters
  • 571 Forks
  • 0 Open issues
  • 24 Versions
  • 22 % Grown

The README.md

Yii 2 Starter Kit

Packagist Packagist PayPal donate button Dependency Status Build Status, (*1)

This is Yii2 one-domain start application template, Based on yii2-starter-kit, (*2)

It was created and developing as a fast start for building an advanced sites based on Yii2., (*3)

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, (*4)

Before you start

Please, consider helping project via contributions or donations., (*5)

TABLE OF CONTENTS

DEMO

Demo is hosted by awesome Digital Ocean, (*6)

Frontend: http://yii2-starter-kit.terentev.net, (*7)

Backend: http://backend.yii2-starter-kit.terentev.net, (*8)

administrator role account, (*9)

Login: webmaster
Password: webmaster

manager role account, (*10)

Login: manager
Password: manager

user role account, (*11)

Login: user
Password: user

FEATURES

  • Beautiful and open source dashboard theme for backend AdminLTE 2
  • Translations: English, Spanish, Russian, Ukrainian, Chinese
  • Translations Editor
  • Language change action + behavior to choose locale based on browser preferred language
  • Sign in, Sign up, profile(avatar, locale, personal data), email activation 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
  • Command Bus with queued and async tasks support trntv/yii2-command-bus
  • 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 and Vagrant support
  • Built-in mailcatcher
  • Assets compression and concatenation
  • Some useful shortcuts
  • 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:, (*12)

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

it will copy all existing messages to database, (*13)

Then uncomment config for DbMessageSource in, (*14)

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., (*15)

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, (*16)

'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., (*17)

Starter kit configured to turn on maintenance mode if frontend.maintenance key in KeyStorage is set to true, (*18)

Command Bus

In Starter Kit Command Bus pattern is implemented with tactician package and it's yii2 connector - yii2-tactician, (*19)

Command are stored in common/commands/command directory, handlers in common/commands/handler, (*20)

To execute command run, (*21)

$sendEmailCommand = new SendEmailCommand(['to' => 'user@example.org', 'body' => 'Hello User!']);
Yii::$app->commandBus->handle($sendEmailCommand);

Timeline (Activity)

$addToTimelineCommand = new AddToTimelineCommand([
    'category' => 'user', 
    'event' => 'signup', 
    'data' => ['foo' => 'bar']
]);
Yii::$app->commandBus->handle($addToTimelineCommand);

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:, (*22)

'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., (*23)

Command Bus

Read more about command bus on in official repository, (*24)

Widgets configurable from backend

  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 For some endpoints you should authenticate your requests with one of available methods - https://github.com/yiisoft/yii2/blob/master/docs/guide/rest-authentication.md#authentication, (*25)

MultiModel

common\base\MultiModel - class for handling multiple models in one In controller:, (*26)

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

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

In view:, (*27)

field($model->getModel('account'), 'username') ?>

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

Other

  • common\behaviors\GlobalAccessBehavior - allows to set access rules for your application in application config, (*28)

  • common\behaviors\LocaleBehavior - discover user locale from browser or account settings and set it, (*29)

  • common\behaviors\LoginTimestampBehavior - logs user login time, (*30)

  • common\validators\JsonValidator - validates a value to be a valid json, (*31)

  • common\rbac\rule\OwnModelRule - simple rule for RBAC to check if the current user is model owner, (*32)

Yii::$app->user->can('editOwnModel', ['model' => $model]);
  • common\filters\OwnModelAccessFilter - action filter to check if user is allowed to manage this model
public function behaviors()
    {
        return [
            'modelAccess' => [
                'class' => OwnModelAccessFilter::className(),
                'only' => ['view', 'update', 'delete'],
                'modelClass' => Article::className()
            ],
        ];
    }

How to contribute?

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

Donations

  • [Paypal] (https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=X7UFA3F3ALPM8)
  • [Bitcoin] (https://www.coinbase.com/checkouts/2f1c1cb31c395e5aaafa1ba70003552e)
  • [WebMoney] (Z110052695454)
  • Other way: eugene@terentev.net

Have any questions?

mail to eugene@terentev.net, (*34)

READ MORE

https://github.com/yiisoft/yii2/blob/master/apps/advanced/README.md https://github.com/yiisoft/yii2/tree/master/docs, (*35)

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!, (*36)

The Versions

30/09 2014

1.2.0

1.2.0.0

Yii 2 Starter Kit Application Template

  Sources   Download

BSD-3-Clause

The Requires

 

The Development Requires

framework application template yii2 start

11/08 2014

1.1.0

1.1.0.0

Yii 2 Starter Kit Application Template

  Sources   Download

BSD-3-Clause

The Requires

 

The Development Requires

framework application template yii2 start

23/07 2014