2016-10-14 13 views
0

Yii2のドロップダウンリストのデフォルト値で提供されている例を使用しようとしましたが、説明がわかりにくく、何も私のために働いていません。私は2つのテーブル、1つは仕事と呼ばれ、もう1つは顧客と呼ばれています。ジョブコントローラの作成機能のドロップダウンリストは正常に機能します。ここでは、コードです:Yii2ドロップダウンリスト更新時に選択されたインデックス

フォームビューで
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

完全なコントローラとフォームコードは、すでに複数の場所で指定されているため、過度です。多くの例がガイド([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与えられたオプション項目の一つは、(それが'customer_id'をだ、この場合には)$modelの属性の値と一致したときに選択した値を表示するように設計されてdropDownList()方法ので、すべてのあなたにこの属性を設定する必要があります。

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()に同じコードが$modelで保存された値で選択'customer_id'を示しています

Jobsの場合は、ActiveRecordのアクションのインスタンスはそのような何かを見ることができますです。

Jobsはあなたにもお好みの'customer_id'を渡すことができ、フォームモデルのインスタンスである場合:今すぐビューショーでdropDownList()のために同じコード

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 
    ]); 
} 

'customer_id' 1の値を選択(場合その値の項目があります)。

+0

まず、私が代わりに提供した方法を使用して、コントローラからビューに変数を渡すことができませんでした。これは$ this-> view-> params ['customer_list']メソッドを使って動作するため、大したことではありません。選択した項目を表示するために与えた例は$ model-> customer_id = 1です。しかし、私が望むのは、ジョブテーブルの現在のレコードから選択されたcustomer_idです。あなたは私にそれをする方法を教えてくれますか?ありがとう。 – user1556325

+0

上記のコメントは無視してください。私はこれを考え出した。更新時のフォームには、選択した項目として表の値が自動的に表示されます。何もする必要はありません。 – user1556325

関連する問題