Traits

Yii2 використання трейтів у моделі, та їх перевизначення
Yii2 використання трейтів у моделі, та їх перевизначення

Кажуть:

вік живи, вік учись, а дурнем помреш

До чого це? А це про трейти в PHP. Вони вже давно з’явилися, а я тільки нещодавно почав їх використовувати в новому проєкті.

Перше, що довелося зробити — винести в trait метод з атрибутами. Так, можна було б створити один батьківський клас і наслідуватися від нього. Але я вирішив зупинитись на трейтах. Що ми маємо:

namespace commontraitsobject;

use Yii;

trait ObjectModelTrait
{
    /**
     * Labels
     * @return array
     */
    public function attributeLabels()
    {
        return [
			'id' => Yii::t('app', 'ID'),
			'name' => Yii::t('app', 'Name'),
			'desc' => Yii::t('app', 'Description'),
			'index_id' => Yii::t('app', 'Index'),
			'is_active' => Yii::t('app', 'Is active'),
        ];
    }
}

Цей trait багаторазово використовувався в моделях. Ось один із прикладів:

namespace commonmodelsterritory;

use yiidbActiveRecord;

use commontraitsobjectObjectModelTrait;

class TerritoryAreaModel extends ActiveRecord
{
	use ObjectModelTrait;
	
    public static function tableName()
    {
        return '{{%territory_area}}';
    }
}

читати далі...