Страница 1 из 1

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

Добавлено: 2018.12.09, 06:02
nickdenry
Всем привет. Возможно ли передать атрибут модели в конфиге поведения?

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

 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
                ]
            ],

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

Добавлено: 2018.12.09, 10:28
urichalex
В самом поведении модель доступна полностью по $this->owner

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

Добавлено: 2018.12.09, 15:36
nickdenry
Хотелось бы передать конфигурацию именно поведению. По $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');

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

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

Добавлено: 2018.12.09, 15:42
nickdenry
Для первого yii предлагается такой вариант -

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

'images/avatar-pics/' . CHtml::value($this, 'user.username') 
Есть альтернатива для yii2?

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

Добавлено: 2018.12.09, 17:37
nickdenry
Всем спасибо, использовал 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'];