Yii2下拉列表在更新时选择了索引

时间:2016-10-14 19:35:27

标签: drop-down-menu yii2 selected

我已经尝试使用默认值提供的示例作为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-']) ?>

我想要的是更新以显示客户表中的整个列表,下拉列表中的作业表中的所选客户将成为下拉列表中的选定值,以便用户可以选择与当前客户不同的客户地选择。

请提供完整的答案,包括控制器和表单代码。谢谢!

1 个答案:

答案 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(如果有该项的值)。