Yii2通过动态模型查看

时间:2015-04-15 05:14:20

标签: php dynamic model yii2

我有一个创建工资单页面,我想传递动态模型,因为此页面/视图需要多个收入项目。

我的控制器中的actionCreateNew

$session = Yii::$app->session;  
$model = new Payslip();
$model->user_id = $id;
$model1 = new EarningDetails();
$model2 = new DeductionDetails();
$items = PayrollItems::find()->where(['store_id' => $id])->andwhere(['active' => 1])->andwhere(['payroll_type' => 'Earnings'])->all();
$count = count($items);
for($i = 1; $i <= $count; $i++){
    $earning[$i] = new EarningDetails();
    $earning[$i]->earning_item_id = $items[$i];
}

这是我在同一个动作控制器中的return语句:

return $this->render('create', [
    'model' => $model,
    'model1' => $model1,
    'model2' => $model2,
    'items' => $items, 
]);

并在我的视图

<?php 
    $earnings = PayrollItems::find()->where(['store_id' => $session['store_id']])->orwhere(['store_id' => null])->where(['payroll_type' => 'Earnings'])->all();
    //$earningslistData = ArrayHelper::map($earnings,'payroll_items_id', 'payroll_name');
    $earningslistData = ArrayHelper::map($earnings,'payroll_items_id',function($items, $defaultValue) {
        return $items->payroll_name;
    });
    for($i = 1; $i <= $count; $i++) {
        echo $form->field($earning[$i], 'earning_item_id')->widget(Select2::classname(), [
            'data' => $earningslistData,
            'options' => ['placeholder' => 'Select an Earning ', 'id' => 'earning_item'],
            'pluginOptions' => [
                'allowClear' => true
            ],
        ]);
    }
?>

问题是,如何返回动态模型?所以我可以在我看来使用它。在我上面的return语句中,没有$earning,因为它是一个动态模型,我不知道要返回它。

如果您有关于动态模型的任何其他实现,请告诉我们。

1 个答案:

答案 0 :(得分:4)

你已经到了一半。

首先,您的代码段中没有动态模型,只是一个模型数组。动态模型为an actual thing in Yii

现在,如果您希望在控制器中创建的$earning数组在视图中可用,只需在调用render()时向数组中添加一个条目:

return $this->render('create', [
    'model' => $model,
    'model1' => $model1,
    'model2' => $model2,
    'items' => $items, 
    'earning' => $earning,
]);

您可能还想将$earningslistData的定义移动到控制器并以相同的方式将其传递给视图。