kakadu-dev/yii2-enum

Extension provide very simply use enum for models (and others) in yii2

Installs: 1 225

Dependents: 0

Suggesters: 0

Security: 0

Stars: 1

Watchers: 4

Forks: 1

Open Issues: 0

Type:yii2-extension

1.3 2018-12-05 12:36 UTC

This package is auto-updated.

Last update: 2024-05-06 09:26:36 UTC


README

Extension provide very simply use enum for models (and others) in yii2

Installation

The preferred way to install this extension is through composer.

Either run

php composer.phar require --prefer-dist kakadu-dev/yii2-enum "@dev"

or add

"kakadu-dev/yii2-enum": "@dev"

to the require section of your composer.json file.

Usage

Once the extension is installed, simply use it in your code by:

Create directory structure for model "User" (only example, not required):

common/  
    models/    
        Users/  
            Enums/
                UserStatus.php
            User.php
            UserQuery.php

UserStatus class example:

<?php

namespace common\models\Users\Enums;

use Yii;
use Kakadu\Yii2Enum\Enum;

class UserStatus extends Enum
{
    const DELETED = 0;
    const ACTIVE  = 1;

    protected static $attribute = 'status';

    public static function all(): array
    {
        return [
            self::DELETED => Yii::t('app', 'Deleted'),
            self::ACTIVE  => Yii::t('app', 'Active'),
        ];
    }
}

And use:

namespace common\models\Users;

use common\models\Users\Enums\UserStatus;

class User extends ActiveRecord
{
    public function rules(): array
    {
        return [
            ['status', 'default', 'value' => UserStatus::ACTIVE],
            ['status', 'in', 'range' => UserStatus::keys()],
        ];
    }
    ...
}

More examples:

$model = new User(['status' => UserStatus::ACTIVE]);

if (UserStatus::has($model, UserStatus::ACTIVE)) {
    // do something
}

// DetailView widget (or GridView)
DetailView::widget([
    'model'      => $model,
    'attributes' => [
        'id',
        'name',
        [
            'attribute' => 'status',
            'filter'    => UserStatus::all(),
            'value'     => UserStatus::get($model->status),
        ],
        ...
    ],
])

// In form
$form->field($model, 'status')->dropDownList(UserStatus::all())

Add translation (e.g. in main.php):

'i18n'           => [
    'translations' => [
        'kkd-enum*' => \Kakadu\Yii2Enum\EnumTranslation::getConfig(),
    ],
],

That's all. Check it.