@EVOSandru6

Можно ли в Yii2 смержить attributeLabels модели и поведения?

Доброе утро,

С правилами разабрался - как это делается, примерно так:

public function attach($owner)
    {
        parent::attach($owner);

        $owner->on(ActiveRecord::EVENT_BEFORE_INSERT,[$this,'onBeforeSave']);
        $owner->on(ActiveRecord::EVENT_BEFORE_UPDATE,[$this,'onBeforeSave']);
        $owner->on(ActiveRecord::EVENT_AFTER_INSERT,[$this,'onAfterSave']);
        $owner->on(ActiveRecord::EVENT_AFTER_UPDATE,[$this,'onAfterSave']);
        $owner->on(ActiveRecord::EVENT_AFTER_DELETE,[$this,'onAfterDelete']);

        $validators = $owner->getValidators();

        $validators[] = Validator::createValidator('integer', $this->owner, 'date_create_stamp');
        $validators[] = Validator::createValidator('integer', $this->owner, 'date_update_stamp');
        $validators[] = Validator::createValidator('integer', $this->owner, 'author_id');
        $validators[] = Validator::createValidator('integer', $this->owner, 'exist');
        $validators[] = Validator::createValidator('integer', $this->owner, 'sort');
        $validators[] = Validator::createValidator('default', $this->owner, ['date_create','date_update'], ['date', 'value' => date('Y-m-d H:i:s')]);
        $validators[] = Validator::createValidator('date', $this->owner, ['date_create','date_update'], ['format' => date('Y-m-d H:i:s')]);

        $owner->validators = $validators;
    }


А вот с attributeLabels не нашел информацию. Подскажите пожалуйста!
  • Вопрос задан
  • 1260 просмотров
Решения вопроса 3
webinar
@webinar Куратор тега Yii
Учим yii: https://youtu.be/-WRMlGHLgRg
Честно говоря не понял зачем такая куча тегов. На мой взгляд приатачить правила проще так:
public function attach($owner)
  {
    parent::attach($owner);
    $validator = \yii\validators\Validator::createValidator('safe', $owner, 'new_tags');
    $owner->validators[] = $validator;
  }

label не пробовал, но думаю должно работать так:
$owner->setAttribute('some_attribute', 'some_attribute')
Ответ написан
Комментировать
slo_nik
@slo_nik Куратор тега Yii
Доброе утро.
Попробуйте так.
public function attributeLabels()
    {
    	return ArrayHelper::merge(parent::attributeLabels(),[
		            'newPassword' => 'Новый пароль',
		            'newPasswordRepeat' => 'Повторить новый пароль'
		    	]);
    }
Ответ написан
qonand
@qonand
Software Engineer
В Вашей ситуации возможны два варианта:
1. Объявить некоторое свойство в модели в которое будет behavior записывать свои значения лейблов а модель соответственно производить объединение, например
class MyModel extends \yii\base\Model
{
    public $myAttributeLabels = [];

    public function attributeLabels()
    {
        $labels = [
            'attributeName' => 'Attribute Label';
        ];
        return array_merge($this->myAttributeLabels, $labels);
    }
}

class MyBehavior extends \yii\base\Behavior
{

    public function attach($owner)
    {
        $owner->myAttributeLabels = [
            'attributeName' => 'Attribute Label'
        ];
    }
}

2. Хранить в behavior лейбы и получать их в модели как в комментариях сказал @iSensetivity
По сути дела оба варианты это костыли приводящие к неочевидности кода, поэтому я бы на Вашем месте вообще отказался от подобных задумок
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы