0

モデルクラスがあり、多くのビューで使用しています。

class Translations extends CActiveRecord
{
...
    public function attributeLabels()
    {
        return array(
            'row_id' => 'Row',
            'locale' => 'Locale',
            'short_title' => 'Short Title',
            'title' => 'Title',
            'sub_title' => 'Sub Title',
            'description' => 'Description',
            'content1' => 'Content1',
            'content2' => 'Content2',
            'com_text1' => 'Com Text1',
            'com_text2' => 'Com Text2',
            'com_text3' => 'Com Text3',
            'com_text4' => 'Com Text4',
            'com_text5' => 'Com Text5',
            'com_text6' => 'Com Text6',         
        );
    }
...
}

各ビューのモデル属性ラベルの値を変更できますか?

4

2 に答える 2

2

使用するビューに応じてモデルのシナリオを宣言し、シナリオに従ってパラメータを定義できますか?あなたのさまざまな見解がさまざまな人々のためのものであるとしましょう:

public function attributeLabels()
{
    switch($this->scenario)
    {
        case 'PersonA':
            $labels = array(
                ...
                'myField' => 'My Label for PersonA',
               ...
            );
            break;
        case 'PersonB':
            $labels = array(
                ...
                'myField' => 'My Label for PersonB',
               ...
            );
            break;
        case 'PersonC':
            $labels = array(
                ...
                'myField' => 'My Label for PersonC',
               ...
            );
            break;
    }
    return $labels;
}

次に、各人のコントローラーで、シナリオを定義できます。

$this->scenario = 'PersonA';

次に、シナリオとして「PersonA」を宣言した後のビューで、「MyLabelforPersonA」のラベルが表示されますmyField

于 2012-11-07T11:41:17.803 に答える
0

公式な方法で属性ラベルを変更できるメソッドや変数はないため、モデルを拡張してサポートすることをお勧めします。

CActiveRecordでは、attributeLabelsという名前のフィールドとsetAttributeLabelsという名前のメソッドを定義し、attributeLabelsメソッドをオーバーライドできます。

protected $attributeLabels = [];

public function setAttributeLabels($attributeLabels = []){
    $this->attributeLabels = $attributeLabels;
}

/**
 * @inheritDoc
 *
 * @return array
 */
public function attributeLabels(){
    return array_merge(parent::attributeLabels(), $this->attributeLabels);
}

そして\yii\ base \ Model::attributeLabelsのドキュメントから

親クラスで定義されたラベルを継承するには、子クラスが。などの関数を使用して親ラベルを子ラベルとマージする必要があることに注意してくださいarray_merge()

したがって、Translationsクラスでは、CActiveRecordクラスなどの親からの属性ラベルをマージする必要があります。したがって、CActiveRecordattributeLabelsメソッドは次のようになります。

public function attributeLabels(){
    return array_merge([
        'row_id' => 'Row',
        'locale' => 'Locale',
        'short_title' => 'Short Title',
        'title' => 'Title',
        'sub_title' => 'Sub Title',
        'description' => 'Description',
        'content1' => 'Content1',
        'content2' => 'Content2',
        'com_text1' => 'Com Text1',
        'com_text2' => 'Com Text2',
        'com_text3' => 'Com Text3',
        'com_text4' => 'Com Text4',
        'com_text5' => 'Com Text5',
        'com_text6' => 'Com Text6',
    ], parent::attributeLabels());
}
于 2019-10-14T03:58:14.143 に答える