Передача атрибута в конфиг поведения модели?

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
nickdenry
Сообщения: 96
Зарегистрирован: 2015.10.28, 04:55

Передача атрибута в конфиг поведения модели?

Сообщение nickdenry » 2018.12.09, 06:02

Всем привет. Возможно ли передать атрибут модели в конфиге поведения?

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

 public function behaviors()
    {
        Yii::info($this); // ?      
        return [
            'upload' => [
                'class' => UploadBehavior::className(),
                'file1' => [
                     'uploadPath' => $this->parent.'/name', // this parent null
                ],
                'file2' => [
                     'uploadPath' => 'images/'.$this->relation->attr.'/another', // this relaion null
                ]
            ],
Ответственные программисты с высоким уровнем технического долга (c)

urichalex
Сообщения: 857
Зарегистрирован: 2015.08.07, 11:03

Re: Передача атрибута в конфиг поведения модели?

Сообщение urichalex » 2018.12.09, 10:28

В самом поведении модель доступна полностью по $this->owner

nickdenry
Сообщения: 96
Зарегистрирован: 2015.10.28, 04:55

Re: Передача атрибута в конфиг поведения модели?

Сообщение nickdenry » 2018.12.09, 15:36

Хотелось бы передать конфигурацию именно поведению. По $this->owner полагаю, нужно писать дополнительную функцию для получения конфигурации из модели.

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


public $uploadPath = [
    'file1' => $this->parent.'/name',
    'file1' => 'images/'.$this->relation->attr.'/another',
];
и

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


public function getUploadPath($file) 
{
    return $this->uploadPath($file);
}
и уже в поведении тогда $this->owner->getUploadPath('file1');

Но так конфигурация создается два раза. Хотелось бы проще. Можно проще?
Ответственные программисты с высоким уровнем технического долга (c)

nickdenry
Сообщения: 96
Зарегистрирован: 2015.10.28, 04:55

Re: Передача атрибута в конфиг поведения модели?

Сообщение nickdenry » 2018.12.09, 15:42

Для первого yii предлагается такой вариант -

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

'images/avatar-pics/' . CHtml::value($this, 'user.username') 
Есть альтернатива для yii2?
Ответственные программисты с высоким уровнем технического долга (c)

nickdenry
Сообщения: 96
Зарегистрирован: 2015.10.28, 04:55

Re: Передача атрибута в конфиг поведения модели?

Сообщение nickdenry » 2018.12.09, 17:37

Всем спасибо, использовал Closure.

В модели.

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

'file1' => function($model) {
    'uploadPath' => $this->parent.'/name', // this parent null
},
В поведении.

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

$path = $config['file1']['uploadPath'] instanceof \Closure ? 
    call_user_func($config['file1']['uploadPath'], $this->owner) : 
    $config['file1']['uploadPath'];
Ответственные программисты с высоким уровнем технического долга (c)

Ответить