在Yii2中依赖下拉列表中的值

时间:2016-07-30 07:14:30

标签: drop-down-menu yii2

我创建了一个Dependent下拉列表,现在我想在更新页面上获取这些值。我该怎么办?

我创建了2个下拉列表 - 第一个客户和第二个员工 在更新页面,我得到了客户的价值,但我没有得到员工的价值(因为它是依赖下拉)

表格

   <?php  
    //First drop-down  
    echo $form->field($model, 'client')->dropDownList($Client, 
     ['prompt'=>'-Select Client-',
      'onchange'=>'
        $.post
        ( 
            "'.urldecode(
      Yii::$app->urlManager->createUrl
      ('leads/lists&id=')).'"+$(this).val(), function( data ) 
         {
          $( "select#staff_id" ).html( data );
        });
    ']); ?> 

     // depend dropdown
    <?php echo $form->field($model, 'staff')
          ->dropDownList
           (     
                 ['prompt'=>'-Choose a Sub Category-'],
                 ['id'=>'staff_id','value'=>$Staff]
            );
    ?>

控制器

public function actionLists($id)
{
    $sql = "select * from staff  where client='$id' ";
   //exit;
    $models = Staff::findBySql($sql)->asArray()->all();   
    //echo "<pre>";print_r($model);exit;

    if(sizeof($models) >0){
        echo "<option>-Choose a Sub Category-</option>";
        foreach($models as $model){
            echo "<option value='".$model['id']."'>".$model['fname']."</option>";
        }
    }
    else{
        echo "<option>-Choose a Sub Category-</option><option></option>";
    }

}

2 个答案:

答案 0 :(得分:1)

首先将$ modelsStaff变量添加到您的创建和更新操作中,如下所示:

<?
public function actionCreate() 
{ 
    $modelsStaff=null;
    $model = new model(); 
    if ($model->load(Yii::$app->request->post()) && $model->save()) 
    { 
        return $this->redirect(['view', 'id' => $model->id]); 
    } 
    else
    {
        return $this->render('create', [ 'model' => $model,'modelsStaff'=>$modelsStaff]); 
    } 
}
public function actionUpdate($id) 
{ 
    $model = $this->findModel($id); 
    if ($model->load(Yii::$app->request->post()) && $model->save()) 
    { 
        return $this->redirect(['view', 'id' => $model->id]); 
    } 
    else
    {
        $sql = "select * from staff  where client='$model->client'";
        $modelsStaff = Staff::findBySql($sql)->asArray()->all();    
        return $this->render('update', [ 'model' => $model,'modelsStaff'=>$modelsStaff]); 
    } 
}

?>

在您的更新操作中,使用$ model-&gt;客户端查找所有员工并获取此客户端下的所有员工并更新您的视图

<?php  
    //First drop-down  
    echo $form->field($model, 'client')->dropDownList($Client, 
     ['prompt'=>'-Select Client-',
      'onchange'=>'
        $.post
        ( 
            "'.urldecode(
      Yii::$app->urlManager->createUrl
      ('leads/lists?id=')).'"+$(this).val(), function( data ) //<---
         {
          $( "select#staff_id" ).html( data );
        });
    ']); ?> 

     // depend dropdown
    <?php echo $form->field($model, 'staff')->dropDownList
           ($modelsStaff,    
                 ['prompt'=>'-Choose a Sub Category-'],
                 ['id'=>'staff_id','value'=>$Staff]
            );
    ?>

答案 1 :(得分:0)

您必须在控制器中创建单独的功能(如示例):

public function actionLists($id)
    {               
        $posts = \common\models\Post::find()
                ->where(['category_id' => $id])
                ->orderBy('id DESC')
                ->all();

        if (!empty($posts)) {
            $option = '<option>-Select Option-</option>';
            foreach($posts as $post) {
                $options .= "<option value='".$post->id."'>".$post->title."</option>";
            }
            return $options;
        } else {
            return "<option>-</option>";
        }

    }

和查看文件中的示例(示例):

use yii\helpers\ArrayHelper;
$dataCategory=ArrayHelper::map(\common\models\Category::find()->asArray()->all(), 'id', 'name');
    echo $form->field($model, 'category_id')->dropDownList($dataCategory, 
             ['prompt'=>'-Choose a Category-',
              'onchange'=>'
                $.post( "'.Yii::$app->urlManager->createUrl('post/lists?id=').'"+$(this).val(), function( data ) {
                  $( "select#title" ).html( data );
                });
            ']); 

    $dataPost=ArrayHelper::map(\common\models\Post::find()->asArray()->all(), 'id', 'title');
    echo $form->field($model, 'title')
        ->dropDownList(
            $dataPost,           
            ['id'=>'title']
        );

这来自Yii文档:https://www.yiiframework.com/wiki/723/creating-a-dependent-dropdown-from-scratch-in-yii2