kakadu-dev / yii2-enum
Extension provide very simply use enum for models (and others) in yii2
Installs: 1 239
Dependents: 0
Suggesters: 0
Security: 0
Stars: 1
Watchers: 4
Forks: 1
Open Issues: 0
Type:yii2-extension
Requires
- php: >=7.1
- yiisoft/yii2: *
This package is auto-updated.
Last update: 2025-03-06 11:12:22 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.