2016-08-05 81 views
1

在我的用戶模型我有一個函數:Yii2 GridView控件值調用模型函數

public function getRole() { 
    if ($this->role == self::ROLE_USER) { 
     return "user"; 
    } else if ($this->role == self::ROLE_ADMIN) { 
     return "admin"; 
    } 

    return "unassigned"; 
} 

在我想稱它爲GridView的,但不能弄清楚如何在Yii2,老Yii的方式似乎不工作:

[ 
    'attribute' => 'role', 
    'filter' => false, 
    'format' => 'raw', 
    'value' => '$model->getRole()', 
], 

我不想使用匿名函數:

'value' => function($model) { 
    switch($model->role) { 
     case 10: 
      return "user"; 
      break; 
     case 90; 
      return "admin"; 
      break; 
     default; 
      return "unassigned"; 
      break; 
    } 
}, 
+0

有什麼特別的原因,你不希望使用匿名函數?這是首選方式。 – Bizley

+0

,因爲它的代碼重複,因爲我在其他情況下使用'getRole' – keeg

+0

這意味着它的代碼重複和.. ...?請在我正在檢查並返回角色字符串的匿名函數中更好地解釋您的評論 – scaisEdge

回答

2

您可以使用閉包(匿名函數)

[ 
    'attribute' => 'role', 
    'filter' => false, 
    'format' => 'raw', 
    'value' => function ($model) { 
     return $model->getRole(); 
    }, 
], 

值屬性的設置可以用細繩或匿名函數(沒有其他)

$值來實現 - 公共財產

匿名函數或使用字符串 來確定要顯示在當前列中的值。

如果這是一個匿名函數,它將被調用的每一行,並且返回值將被用作爲顯示每個數據的值 模型。

http://www.yiiframework.com/doc-2.0/yii-grid-datacolumn.html# $值細節

如果是關係到$模型實例所需的值的匿名函數是唯一的可能性

+0

但是...但是...它是匿名函數,你說你不想使用... – Bizley

+0

我已經添加了來自Yii2 doc的簡要說明..似乎閉包是(只有)這種結果的方式.. – scaisEdge

+0

它顯然是@keeg與其他東西混淆。 – Bizley