yii2에서 드롭 다운 목록을 만드는 방법은 무엇입니까?


85

및 모델 dropdownyii2사용하여 만드는 방법은 activeform무엇입니까? 에서 모든 방법이 변경 yii2되었으므로 새 방법에서는 어떻게 수행됩니까?


이 질문이 수정 되었습니까? 그렇다면 초기 질문은 무엇 이었습니까?
Kshitiz

@Dency GBI는 이것과 비슷한 내 다른 질문에 대한 답을 찾고 있습니다 .. 당신이 그것을 볼 수 있습니까 ?? 여기에 링크
모한 프라 사드에게

답변:


122

그것은 같다

<?php
use yii\helpers\ArrayHelper;
use backend\models\Standard;
?>

<?= Html::activeDropDownList($model, 's_id',
      ArrayHelper::map(Standard::find()->all(), 's_id', 'name')) ?>

Yii2의 ArrayHelper는 Yii 1.1의 CHtml 목록 데이터를 대체합니다. [컨트롤러에서 배열 데이터를로드하십시오]

편집하다

컨트롤러에서 데이터를로드합니다.

제어 장치

$items = ArrayHelper::map(Standard::find()->all(), 's_id', 'name');
...
return $this->render('your_view',['model'=>$model, 'items'=>$items]);

보기에서

<?= Html::activeDropDownList($model, 's_id',$items) ?>

1
Yii2는 네임 스페이스를 사용하므로 솔루션에서 '사용 네임 스페이스'를 사용합니다. 그들이 무엇인지 생각하는 데 시간이 걸렸습니다.
johnsnails 2014-06-05

11
이 예제를 직접 따르지 말고 뷰에서 데이터 가져 오기 / 빌드 로직을 사용하십시오!
AndrewPK

@AndrewPK :이 작업을 선호하는 방법의 예를 제공 할 수 있습니까? 아마도 컨트롤러에서 통과 했습니까?
almcnicoll 2015

@AndrewPK 왜? 그것은 위젯과 같으며, 뷰에서 데이터를 가져올 수 있으며 안티 패턴이 아닙니다. 하지만 db 등에서 무언가를 생성하는 쿼리를 생성 할 수 없습니다
Auine

2
@Auine 자신 만의 패턴을 만들었습니까? mvc, mvvm 등은 모두 우려 사항의 분리를 설명합니다. 뷰는 주어진 데이터를 표시하는 데에만 관심을 가져야합니다. 쿼리, GET 등을 수행해서는 안됩니다. 이러한 패턴 중 하나를 고수하지 않으려는 경우에도 좋습니다.하지만 다음과 같은 경우 작업이 더 어려워집니다. 앞으로 다른 플랫폼을 지원하려면 뷰를 교체해야합니다. 작성자가 위에서 제공 한 편집 된 답변은 MVC에서 더 이상적인 솔루션입니다. 컨트롤러에 find ()가 있고 데이터를 뷰 렌더로 전달합니다.
AndrewPK

93

이미 답을 찾은 것 같지만 활성 양식을 언급 했으므로 조금만 다르더라도 하나 더 기여하겠습니다.

<?php
    $form = ActiveForm::begin();

    echo $form->field($model, 'attribute')
        ->dropDownList(
            $items,           // Flat array ('id'=>'label')
            ['prompt'=>'']    // options
        );

    ActiveForm::end();
?>

@DencyGB가 가장 간단하고 유일한 해결책은 첫 번째 선택 필드 이름을 지정하고 .on('change')jquery에서 이벤트를 조작하여 첫 번째 선택을 기반으로 두 번째 필드를 채우는 것입니다.
Arman P.

자동으로 표시되는 목록에서 일반 번호를 제거하고 싶습니다.
Mohammad Aghayari 2016 년

56

위의 몇 가지 좋은 솔루션이 있으며 내 것은 두 가지의 조합 일뿐입니다 (솔루션을 찾고 여기에 왔습니다).

@Sarvar Nishonboyev의 솔루션은 오류 메시지에 대한 양식 입력 레이블 및 도움말 블록 생성을 유지하기 때문에 좋습니다.

나는 ~와 갔다:

<?php
use yii\helpers\ArrayHelper;
use app\models\Product;
?>
<?=
$form->field($model, 'parent_id')
     ->dropDownList(
            ArrayHelper::map(Product::find()->asArray()->all(), 'parent_id', 'name')
            )
?>

다시 말하지만, @Sarvar Nishonboyev 및 @ippi에 대한 전체 크레딧


21

이 질문에 대한 좋은 답변이 많은 것 같으니 자세한 답변을 드리도록하겠습니다.

활성 양식 및 하드 코딩 된 데이터

<?php
    echo $form->field($model, 'name')->dropDownList(['1' => 'Yes', '0' => 'No'],['prompt'=>'Select Option']);
?>

또는

<?php
    $a= ['1' => 'Yes', '0' => 'No'];
    echo $form->field($model, 'name')->dropDownList($a,['prompt'=>'Select Option']);
?>

db 테이블의 활성 양식 및 데이터

ArrayHelper를 사용할 것이므로 먼저 네임 스페이스에 추가합니다.

<?php
    use yii\helpers\ArrayHelper;
?>

ArrayHelper는 배열을 처리하는 데 사용할 수있는 전체 기능을 많이 사용합니다. map ()은 여기서 사용할 것입니다.이 함수는 다차원 배열 또는 객체 배열에서 맵 (키-값 쌍)을 만드는 데 도움이됩니다.

<?php
    echo $form->field($model, 'name')->dropDownList(ArrayHelper::map(User::find()->all(),'id','username'),['prompt'=>'Select User']);
?>

활성 양식의 일부가 아닙니다.

<?php
    echo Html::activeDropDownList($model, 'filed_name',['1' => 'Yes', '0' => 'No']) ;
?>

또는

<?php
    $a= ['1' => 'Yes', '0' => 'No'];
    echo Html::activeDropDownList($model, 'filed_name',$a) ;
?>

활성 양식이 아니라 db 테이블의 데이터

<?php
    echo Html::activeDropDownList($model, 'filed_name',ArrayHelper::map(User::find()->all(),'id','username'),['prompt'=>'Select User']);
?>

15

이것 좀 봐 :

use yii\helpers\ArrayHelper; // load classes
use app\models\Course;
    .....
$dataList=ArrayHelper::map(Course::find()->asArray()->all(), 'id', 'name');
<?=$form->field($model, 'center_id')->dropDownList($dataList, 
         ['prompt'=>'-Choose a Course-']) ?>

10

어쩌면 내가 틀렸을 수도 있지만 SQL 쿼리가 나쁜 생각이라고 생각합니다.

이게 내 방법이야

컨트롤러에서

$model = new SomeModel();
$items=ArrayHelper::map(TableName::find()->all(),'id','name');


return $this->render('view',['model'=>$model, 'items'=>$items])

그리고보기

<?= Html::activeDropDownList($model, 'item_id',$items) ?>

또는 ActiveForm 사용

<?php $form = ActiveForm::begin(); ?>
 <?= $form->field($model, 'item_id')->dropDownList($items) ?>
<?php ActiveForm::end(); ?>

뷰에 액세스 할 때 정의되지 않은 변수 항목을 말합니다. 나는 컨트롤러에 코드를 추가이 방법을 사용 $this->view->params['items'] = $items;하고 내보기 페이지에서<?php echo $form->field($model, 'plan_type', ['options' => ['class' => ' input select']])->dropdownList( $this->params['items'],['prompt'=>'Select Plan','class' => 'selectpicker', 'data-live-search' => 'true','label'=>false]);?>
RN Kushwaha

동일한 문제가 있습니다. $ items 변수가 내보기에 비어 있습니다
MeV

8
<?= $form->field($model, 'attribute_name')->dropDownList(
         ArrayHelper::map(Table_name::find()->all(),'id','field_name'),
        ['prompt' => 'Select']
) ?>

이것은 당신을 도울 것입니다 ... 헤더에서 클래스 파일을 사용하는 것을 잊지 마십시오.


1
보기 파일 위에 use yii\helpers\ArrayHelper; 헬퍼를 사용할 수 있도록 작성 해야합니다.
Gogol

5

에서 ActiveForm바로 사용 :

<?=
    $form->field($model, 'state_id')
         ->dropDownList(['prompt' => '---- Select State ----'])
         ->label('State')
?>

5

이것은 데이터 생성에 관한 것이며 모델에서 더 적절하게 수행됩니다. 드롭 다운 상자에 데이터가 표시되는 방식을 변경하고 싶었다고 상상해보십시오. 모든 드롭 다운 상자를 찾아서 arrayHelper. 모델에서 함수를 사용하여 드롭 다운에 대한 데이터를 반환하므로 뷰에서 코드를 반복 할 필요가 없습니다. 여기에서 필터를 지정하고이 모델에서 생성 된 모든 드롭 다운에 적용 할 수 있다는 장점도 있습니다.

/* Model Standard.php */

public function getDropdown(){
      return ArrayHelper::map(self::find()->all(), 's_id', 'name'));
}

다음과 같이보기 파일에서 이것을 사용할 수 있습니다.

echo $form->field($model, 'attribute')
        ->dropDownList(
            $model->dropDown
        );

1

목록의 맨 아래로 만들었다면. 일부 PHP 코드를 저장하고 다음과 같이 필요에 따라 DB에서 모든 것을 다시 가져옵니다.

 $items = Standard::find()->select(['name'])->indexBy('s_id')->column();

0

Html :: activeDropDownList ($ model, 'id', ArrayHelper :: map (AttendanceLabel :: find ()-> all (), 'id', 'label_name'), [ 'prompt'=> 'Attendance Status']) ;


-3

다음도 할 수 있습니다. 앞에 추가 아이콘을 추가하려는 경우. 이것은 도움이 될 것입니다.

<?php $form = ActiveForm::begin();    
   echo $form->field($model, 'field')->begin();
     echo Html::activeLabel($model, 'field', ["class"=>"control-label col-md-4"]); ?>
       <div class="col-md-5">
          <?php echo Html::activeDropDownList($model, 'field', $array_list, ['class'=>'form-control']); ?>
          <p><i><small>Please select field</small></i>.</p>
          <?php echo Html::error($model, 'field', ['class'=>'help-block']); ?>
       </div>
   <?php echo $form->field($model, 'field')->end(); 
ActiveForm::end();?>
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.