2015-08-25 7 views
6

मैं Yii2 GridView विजेट के कुछ कॉलम प्रदर्शित कर रहा हूँ, 'कार्यकारी नाम' उन में से एक है लेकिन यह केवल जब एक पर्यवेक्षक नहीं में लॉग ऑन है जब कार्यकारी में लॉग इन प्रदर्शित किया जाना चाहिए।Yii2 GridView छिपाने स्तंभ सशर्त

जब मैं मुश्किल इस प्रकार के रूप में यह दिखाई नहीं दे रहा शून्य दिखाई कोडिंग कर रहा हूँ:

[ 
    'label' => 'Executive Name', 
    'attribute' => 'cs.first_name', 
    'visible' => '0', 
], 

लेकिन मैं इसे सशर्त कुछ इस तरह प्रदर्शित करना चाहते हैं:

[ 
    'label' => 'Executive Name', 
    'attribute' => 'cs.first_name', 
    'visible' => function ($data) { 
     if ($data->hc_customersupport->is_supervisor) { 
      return '1'; // or return true; 
     } else { 
      return '0'; // or return false; 
     } 
    }, 
], 

कृपया बताती हैं कि यह दृष्टिकोण सही है।

+0

चेकबॉक्स विकल्प संपत्ति इसे प्राप्त करने में बहुत मददगार है –

उत्तर

10

yii\grid\DataColumnyii\grid\Column से बढ़ाया गया है जिसमें visible संपत्ति है। जैसा कि आप दस्तावेज़ों से देख सकते हैं, यह केवल बूलियन मान स्वीकार करता है, लेकिन निश्चित रूप से आप उन अभिव्यक्तियों को गतिशील रूप से गणना कर सकते हैं जो एक अभिव्यक्ति लौटने वाले बूलियन मान को पास कर सकते हैं। आरबीएसी के साथ उदाहरण:

use Yii; 

... 

'visible' => Yii::$app->user->can('supervisor'), 

कॉल करने योग्य कॉल करने की अनुमति नहीं है और इसका कोई मतलब नहीं है। तर्कसंगत रूप से इस बारे में सोचें - पूरे कॉलम की दृश्यता कंक्रीट पंक्ति (मॉडल) से क्यों निर्भर है?

पीएस आपको बुलियन वापस करना चाहिए, पूर्णांक या स्ट्रिंग नहीं। इसके अलावा अपने अभिव्यक्ति सिर्फ इस को कम किया जा सकता है:

return $data->hc_customersupport->is_supervisor; 

लेकिन is_supervisor जांच definetely गलत है, यह ऐसा नहीं कहा जाना चाहिए (मॉडल के माध्यम से)। इसके बजाय आरबीएसी का उपयोग करना बेहतर है।

-1

आप अपने मॉडल खोज क्वेरी में शर्त देकर कर सकते हैं। अपनी खोज समारोह में

public function search($params) 
{ 
    query = Table::find()->where(['Column' => 'condition' ]); 
    /* Remaining code */ 
} 
0

मेरे लिए यह काम कर रहा है, $ साथ एक और कार्रवाई कर rowvisible = 1 और एक ही दृश्य प्रस्तुत करना: मॉडल

class SomeClass extends \yii\db\ActiveRecord 
{ 
    public $rowvisible; 
... 

नियंत्रक

public function actionIndex() 
    { 
     $rowvisible = 0; 
     $searchModel = new PostSearch(); 
     $dataProvider = $searchModel->search(Yii::$app->request->queryParams); 

     return $this->render('index', [ 
      'searchModel' => $searchModel, 
      'dataProvider' => $dataProvider, 
      'rowvisible'=>$rowvisible, 
     ]); 
    } 

देखें

[ 'attribute'=>'SomeAttribute', 
    'visible' => ($rowvisible==1) , 
    'header' => 'Some Header', 
    'contentOptions' => ['style' => 'width: 4%; background-color:#f3d8d8;'], 
    'headerOptions' => ['style'=>'font-weight: normal; font-size: 8pt;'], 
    'value'=> function ($model) {some arithmetic} 
],