我有一个创建工资单页面,我想传递动态模型,因为此页面/视图需要多个收入项目。
我的控制器中的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
,因为它是一个动态模型,我不知道要返回它。
如果您有关于动态模型的任何其他实现,请告诉我们。
答案 0 :(得分:4)
你已经到了一半。
首先,您的代码段中没有动态模型,只是一个模型数组。动态模型为an actual thing in Yii。
现在,如果您希望在控制器中创建的$earning
数组在视图中可用,只需在调用render()
时向数组中添加一个条目:
return $this->render('create', [
'model' => $model,
'model1' => $model1,
'model2' => $model2,
'items' => $items,
'earning' => $earning,
]);
您可能还想将$earningslistData
的定义移动到控制器并以相同的方式将其传递给视图。