我已经尝试使用默认值提供的示例作为Yii2中的下拉列表,但解释不够明确,我无法理解并且没有任何内容对我有用。我有2个表,一个叫做job,另一个叫customer。作业控制器中的create函数中的下拉列表工作正常。这是代码:
public function actionCreate()
{
$model = new Jobs();
$this->view->params['customer_list'] = ArrayHelper::map(Customers::find()
->orderBy(['(last_name)' => SORT_ASC])
->all(),'id','fullName');
// ...
}
在表单视图中:
<?= $form->field($model, 'customer_id')->dropDownList($this->params['customer_list'],['prompt'=>'-Choose a Customer-']) ?>
我想要的是更新以显示客户表中的整个列表,下拉列表中的作业表中的所选客户将成为下拉列表中的选定值,以便用户可以选择与当前客户不同的客户地选择。
请提供完整的答案,包括控制器和表单代码。谢谢!
答案 0 :(得分:0)
提供完整的控制器和表单代码是过多的,因为它已经在多个地方给出。 “指南”([1],[2])中提供了许多示例,您可以随时查看项目模板([3],[4])中的完成情况。
首先,不需要使用$this->view->params
传递变量,因为您可以直接从控制器传递它们,如:
public function actionCreate()
{
$customer_list = ArrayHelper::map(Customers::find()
->orderBy(['last_name' => SORT_ASC])
->all(), 'id', 'fullName');
return $this->render('create', [
// ...
'customer_list' => $customer_list
]);
}
现在,在create
视图中,$customer_list
变量可用。使用$this->view->params
也可以,但是可以在视图之间传递变量。
<?= $form->field($model, 'customer_id')->dropDownList($customer_list, ['prompt' => '-Choose a Customer-']) ?>
关于下拉列表:
ActiveField dropDownList()
方法用于在其中一个给定选项匹配$model
属性的值(此时为'customer_id'
)时显示所选值,因此您只需要要做的是设置此属性。
如果Jobs
是ActiveRecord的实例,则操作可能如下所示:
public function actionUpdate($id)
{
$model = Jobs::findOne($id); // $id is primary key in the DB table for Jobs model
// operations on $model here
$customer_list = ArrayHelper::map(Customers::find()
->orderBy(['last_name' => SORT_ASC])
->all(), 'id', 'fullName');
return $this->render('update', [
'model' => $model,
'customer_list' => $customer_list
]);
}
现在,视图中dropDownList()
的相同代码显示'customer_id'
,并使用$model
保存的值进行选择。
如果Jobs
是模型形式的实例,您也可以传递您选择的'customer_id'
:
public function actionUpdate()
{
$model = new Jobs();
$model->customer_id = 1; // example
// operations on $model here
$customer_list = ArrayHelper::map(Customers::find()
->orderBy(['last_name' => SORT_ASC])
->all(), 'id', 'fullName');
return $this->render('update', [
'model' => $model,
'customer_list' => $customer_list
]);
}
现在,视图中dropDownList()
的相同代码显示'customer_id'
,其值为1(如果有该项的值)。