Starter Kit has fully configured and ready-to-use REST API module. You can access it on http://yii2-starter-kit.localhost/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
$addToTimelineCommand = new AddToTimelineCommand([
'category' => 'user',
'event' => 'signup',
'data' => ['foo' => 'bar']
]);
Yii::$app->commandBus->handle($addToTimelineCommand);
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
common\behaviors\LocaleBehavior
- discovers user locale from browser's predefined language or account settings
Basic Queueing component implementation a file based queueing service.
Additional module readme.
Implement Queue class
class DownloadJob extends BaseObject implements \yii\queue\JobInterface
{
public $url;
public $file;
public function execute($queue)
{
file_put_contents($this->file, file_get_contents($this->url));
}
}
Here's how to send a task into queue:
Yii::$app->queue->push(new DownloadJob([
'url' => 'http://example.com/image.jpg',
'file' => '/tmp/image.jpg',
]));
Pushes job into queue that run after 5 min:
Yii::$app->queue->delay(5 * 60)->push(new DownloadJob([
'url' => 'http://example.com/image.jpg',
'file' => '/tmp/image.jpg',
]));
Command that obtains and executes tasks in a loop until queue is empty:
php ./console/yii queue/run
Command launches a daemon which infinitely queries the queue:
php ./console/yii queue/listen
See additional documentation for more details about driver console commands and their options.
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
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(),
'statusCode' => ''
]
...
]
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
or APP_MAINTENANCE
environment variable set ot 1
public function behaviors()
{
return [
[
'class' => `common\behaviors\CacheInvalidateBehavior`,
'tags' => [
'awesomeTag',
function($model){
return "tag-{$model->id}"
}
],
'keys' => [
'awesomeKey',
function($model){
return "key-{$model->id}"
}
]
],
];
}
Allows to set access rules for your application in 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.
Read more about command bus on in official repository
- Create carousel in backend
- Use it:
<?php echo DbCarousel::widget(['key' => 'key-from-backend']) ?>
- Create text block in backend
- Use it:
<?php echo DbText::widget(['key' => 'key-from-backend']) ?>
- Create text block in backend
- Use it:
<?php echo DbMenu::widget(['key' => 'key-from-backend']) ?>
[
'class' => '\common\grid\EnumColumn',
'attribute' => 'status',
'enum' => User::getStatuses() // [0=>'Deleted', 1=>'Active']
]
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\LoginTimestampBehavior
- logs user login time -
common\validators\JsonValidator
- validates a value to be a valid json -
common\rbac\rule\OwnModelRule
- simple rule for RBAC to check if the current user is model owner
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'],
'modelCreatedByAttribute' => 'created_by',
'modelClass' => Article::className()
],
];
}