2017 © Pedro Peláez
 

yii2-extension yii2-enum

Enum type behavior for Yii2 based on class constants

image

tigrov/yii2-enum

Enum type behavior for Yii2 based on class constants

  • Thursday, March 1, 2018
  • by Tigros
  • Repository
  • 1 Watchers
  • 0 Stars
  • 1,087 Installations
  • PHP
  • 1 Dependents
  • 0 Suggesters
  • 0 Forks
  • 0 Open issues
  • 6 Versions
  • 10 % Grown

The README.md

yii2-enum

Enum type behavior for Yii2 based on class constants., (*1)

Latest Stable Version Build Status, (*2)

Limitation

Since 1.1.0 requires PHP >= 5.5, (*3)

Installation

The preferred way to install this extension is through composer., (*4)

Either run, (*5)

php composer.phar require --prefer-dist tigrov/yii2-enum

or add, (*6)

"tigrov/yii2-enum": "~1.0"

to the require section of your composer.json file., (*7)

Usage

Once the extension is installed, you can create an enum behavior as follow:, (*8)

class Status extends \tigrov\enum\EnumBehavior
{
    const ACTIVE = 'active';
    const PENDING = 'pending';
    const REJECTED = 'rejected';
    const DELETED = 'deleted';

    /** @var array list of attributes that are to be automatically humanized value */
    public $attributes = ['status' => 'status_key'];

    /** @var string|null a message category for translation the values */
    public static $messageCategory = 'status';
}

Create a table with the enum field, (*9)

\Yii::$app->getDb()->createCommand()
    ->createTable('model', [
       'id' => 'pk',
       'status_key' => 'string',
   ])->execute();

Create a model for the table, (*10)

class Model extends \yii\db\ActiveRecord
{
    /**
     * @inheritdoc
     */
    public function behaviors()
    {
        return [
            Status::class,
            // 'status' => [
            //     'class' => Status::class,
            //     'attributes' => ['status' => 'status_key'],
            // ],
        ];
    }

    /**
     * @inheritdoc
     */
    public function rules()
    {
        return [
            [['status_key'], 'in', 'range' => Status::codes()],
        ];
    }
}

and then use them in your code, (*11)

/**
 * @var ActiveRecord $model
 */
$model = new Model;
$model->status_key = Status::PENDING;

// The field 'status' has humanize and translated value, see \yii\helpers\Inflector::humanize($word, true)
$model->status; // is 'Pending' or translated value

// To get all enum values
Status::values();

// To get a display value
Status::value(Status::PENDING); // is 'Pending' or translated value

Examples

Gender codes:, (*12)

class GenderEnum extends \tigrov\enum\EnumBehavior
{
    const MALE = 'M';
    const FEMALE = 'F';

    /**
     * @var array list of attributes that are to be automatically humanized value
     * humanized => original attribute
     */
    public $attributes = ['gender' => 'gender_code'];

    /** @var string|null a message category for translation the values */
    public static $messageCategory = 'gender';

    /**
    * Returns value for empty attribute value
    * @return string|null
    */
    public static function emptyValue()
    {
        return static::t('Unspecified');
    }
}

class Model extends \yii\db\ActiveRecord
{
    public function behaviors()
    {
        return [
            GenderEnum::class,
        ];
    }

    public function rules()
    {
        return [
            [['gender_code'], 'in', 'range' => GenderEnum::codes()],
        ];
    }
}

$model->gender_code = GenderEnum::MALE; // is 'M'

// The field 'gender' has humanize and translated value
$model->gender; // is 'Male' or translated value

$model->gender_code = null;
$model->gender; // is 'Unspecified' or translated value. @see GenderEnum::emptyValue()

Messenger names:, (*13)

class MessengerEnum extends \tigrov\enum\EnumBehavior
{
    const SKYPE = 'skype';
    const WHATSAPP = 'whatsapp';
    const VIBER = 'viber';
    const FACEBOOK = 'facebook';
    const IMESSAGE = 'imessage';
    const TELEGRAM = 'telegram';
    const LINE = 'line';
    const JABBER = 'jabber';
    const QQ = 'qq';
    const BLACKBERRY = 'blackberry';
    const AIM = 'aim';
    const EBUDDY = 'ebuddy';
    const YAHOO = 'yahoo';
    const OTHER = 'other';

    /** @var array list of attributes that are to be automatically humanized value */
    public $attributes = ['type' => 'type_key'];

    /**
     * Values of Messengers
     * @param bool $withEmpty with empty value at first
     * @return array
     */
    public static function values($withEmpty = false)
    {
        $values = parent::values($withEmpty);

        // Correct some values
        $values['whatsapp'] = 'WhatsApp';
        $values['imessage'] = 'iMessage';
        $values['qq'] = 'QQ';
        $values['blackberry'] = 'BlackBerry';
        $values['aim'] = 'AIM';
        $values['ebuddy'] = 'eBuddy';
        $values['other'] = \Yii::t('enum', 'Other'),

        return $values;
    }
}

$model->type_key = MessengerEnum::WHATSAPP; // is 'whatsapp'
$model->type; // is 'WhatsApp'

License

MIT, (*14)

The Versions

01/03 2018

dev-master

9999999-dev

Enum type behavior for Yii2 based on class constants

  Sources   Download

MIT

The Requires

 

by Sergei Tigrov

extension yii2 enum

01/03 2018

1.1.0

1.1.0.0

Enum type behavior for Yii2 based on class constants

  Sources   Download

MIT

The Requires

 

by Sergei Tigrov

extension yii2 enum

11/02 2018

1.0.3

1.0.3.0

Enum type behavior for Yii2 based on class constants

  Sources   Download

MIT

The Requires

 

by Sergei Tigrov

extension yii2 enum

07/10 2017

1.0.2

1.0.2.0

Enum type behavior for Yii2 based on class constants

  Sources   Download

MIT

The Requires

 

by Sergei Tigrov

extension yii2 enum

04/07 2017

1.0.1

1.0.1.0

Enum type behavior for Yii2 based on class constants

  Sources   Download

MIT

The Requires

 

by Sergei Tigrov

extension yii2 enum

30/05 2017

1.0.0

1.0.0.0

Enum type behavior for Yii2 based on class constants

  Sources   Download

MIT

The Requires

 

by Sergei Tigrov

enum