Библиотека для хранения списков констант

Выкладываем свои наработки
Ответить
nickdenry
Сообщения: 99
Зарегистрирован: 2015.10.28, 04:55

Библиотека для хранения списков констант

Сообщение nickdenry »

В продолжении темы https://www.yiiframework.ru/forum/viewtopic.php?t=19635 сделал небольшую библиотеку для удобной организации хранения списков констант.

https://github.com/nick-denry/managed-constant-models

Код: Выделить всё

<?php

namespace app\models;

use nickdenry\managedConstants\interfaces\ManagedConstantInterface;
use nickdenry\managedConstants\traits\ManagedConstantTrait;

/**
* TaskStatus constant model
*/
class TaskStatus implements ManagedConstantInterface
{

    use ManagedConstantTrait;

    const ACTIVE = 0;
    const DONE = 1;
    const _ATTRIBUTES = [
        self::ACTIVE => [
            'class' => 'task-active',
            'label' => 'Активна',
        ],
        self::DONE => [
            'class' => 'task-done',
            'label' => 'Завершена',
        ],
    ];

}
Другая модель или класс

Код: Выделить всё

class Task extends \yii\db\ActiveRecord
{
    ...
    /**
    * Get task statuses.
    */
    public static function getStatuses()
    {
        return new TaskStatus(); //TaskStatus()::class;
    }
    ...

}

Доступ из связанной модели или другого класса

Код: Выделить всё

<?php

$constValue = Task::getStatuses()::ACTIVE; //$constValue = 0;

Task::getStatuses()::ACTIVE; // ACTIVE constant;
Task::getStatuses()::DONE; // DONE constant;
Task::getStatuses()::constants(); // Returns array ['ACTIVE' => 0, 'DONE' => 1]
Task::getStatuses()::values(); // Returns array [0, 1]
Task::getStatuses()::listAttributes($constValue); // Returns array ['class' => 'task-active', 'label' => 'Активна']
Task::getStatuses()::attribute($constValue, 'class'); // Returns 'task-active'

Task::getStatuses()::getList(); 
// Returns [
//    ['id' => 0, 'class' => 'task-active', 'label' => 'Активна', ]
//    ['id' => 1, 'class' => 'task-done', 'label' => 'Завершена', ],
// ]

Подробнее здесь https://github.com/nick-denry/managed-c ... /README.md
Ответственные программисты с высоким уровнем технического долга (c)
Ответить