2016-07-31 3 views
0

私は動的な質問と回答があります。これらのデータを収集するためにDynamicModel()を使用します。DynamicModelに属性ラベルを追加するYii

$attributes = [ 
     "answer_1" => "Some Value 1", 
     "answer_2" => "Some Value 2", 
     "answer_3" => "Some Value 3", 
     ..... 
] 

$customFormModel = new DynamicModel($attributes); 

また、私はちょうど$ラベル配列は、私の動的モデルのラベル属性として設定することができません

$labels = [ 
     "answer_1" => "Label 1", 
     "answer_2" => "Label 2", 
     "answer_3" => "Label 3", 
     .....   
] 

を持っています。 My $ customFormModel-> attributeLabels()は常に空です。

次の問題とこれらの結果。 私はあなたがここにDynamicModel概念を誤用のような代わり

Label 1 can not be blank 
Label 2 can not be blank 
Label 3 can not be blank 

答えて

0

はそれが見えます。この

$customFormAttributes = array_map(function ($key) use ($attributes) { 
    return $attributes[$key]; 
}, array_flip($labels)); 

$customFormModel = new DynamicModel($customFormAttributes); 
0

を試してみて欲しいこれら

Answer 1 can not be blank 
Answer 2 can not be blank 
Answer 3 can not be blank 

のようなエラーメッセージを取得します。これは、ad hoc validationではなく、でフォームプレゼンテーションを処理するために使用する必要があります。ラベルを追加する必要がある場合は、通常のModelを使用してください。

あなたはDynamicModelを拡張し、そこattributeLabels()を追加し、代わりに新しいメソッドを使用することができます。しかし、使用できるすべてのもので通常のモデルを作成できるだけのときに、DynamicModelを使用するポイントは何ですか?

あなたが Htmlクラス Html::label()Html::activeLabel()から ActiveFieldウィジェット方法 label()

<?= $form->field($customFormModel, 'attribute')->label('...') ?> 

や静等価を追加できるカスタム属性ラベルについては

0

あなたは、単にこのようDynamicModelを拡張することができます。

class MyDynamicModel extends DynamicModel 
{ 
    public $attributeLabels = []; 

    public function attributeLabels(){ 
     return $this->attributeLabels; 
    } 
} 

今、あなたは、配列

として$ attributeLabelsを設定することができます
関連する問題