Làm thế nào để thực hiện một dropdown
trong yii2
cách sử dụng một activeform
và một mô hình? Vì tất cả các phương thức đã được thay đổi yii2
, nó được thực hiện như thế nào trong phương thức mới?
Làm thế nào để thực hiện một dropdown
trong yii2
cách sử dụng một activeform
và một mô hình? Vì tất cả các phương thức đã được thay đổi yii2
, nó được thực hiện như thế nào trong phương thức mới?
Câu trả lời:
Nó giống như
<?php
use yii\helpers\ArrayHelper;
use backend\models\Standard;
?>
<?= Html::activeDropDownList($model, 's_id',
ArrayHelper::map(Standard::find()->all(), 's_id', 'name')) ?>
ArrayHelper trong Yii2 thay thế dữ liệu danh sách CHtml trong Yii 1.1. [Vui lòng tải dữ liệu mảng từ bộ điều khiển của bạn]
BIÊN TẬP
Tải dữ liệu từ bộ điều khiển của bạn.
Bộ điều khiển
$items = ArrayHelper::map(Standard::find()->all(), 's_id', 'name');
...
return $this->render('your_view',['model'=>$model, 'items'=>$items]);
Đang xem
<?= Html::activeDropDownList($model, 's_id',$items) ?>
Có vẻ như bạn đã tìm thấy câu trả lời của mình nhưng vì bạn đã đề cập đến biểu mẫu đang hoạt động, tôi sẽ đóng góp thêm một câu nữa, ngay cả khi nó chỉ khác một chút.
<?php
$form = ActiveForm::begin();
echo $form->field($model, 'attribute')
->dropDownList(
$items, // Flat array ('id'=>'label')
['prompt'=>''] // options
);
ActiveForm::end();
?>
.on('change')
sự kiện trong jquery để điền trường thứ hai dựa trên lựa chọn của trường đầu tiên.
Có một số giải pháp tốt ở trên, và giải pháp của tôi chỉ là sự kết hợp của cả hai (tôi đến đây để tìm kiếm một giải pháp).
Giải pháp của @Sarvar Nishonboyev là tốt vì nó duy trì việc tạo nhãn nhập biểu mẫu và khối trợ giúp cho các thông báo lỗi.
Tôi đã đi với:
<?php
use yii\helpers\ArrayHelper;
use app\models\Product;
?>
<?=
$form->field($model, 'parent_id')
->dropDownList(
ArrayHelper::map(Product::find()->asArray()->all(), 'parent_id', 'name')
)
?>
Một lần nữa, toàn bộ tín dụng cho: @Sarvar Nishonboyev's và @ippi
Có vẻ như có rất nhiều câu trả lời hay cho câu hỏi này. Vì vậy tôi sẽ cố gắng đưa ra một câu trả lời chi tiết
biểu mẫu hoạt động và dữ liệu được mã hóa cứng
<?php
echo $form->field($model, 'name')->dropDownList(['1' => 'Yes', '0' => 'No'],['prompt'=>'Select Option']);
?>
hoặc là
<?php
$a= ['1' => 'Yes', '0' => 'No'];
echo $form->field($model, 'name')->dropDownList($a,['prompt'=>'Select Option']);
?>
biểu mẫu hoạt động và dữ liệu từ một bảng db
chúng ta sẽ sử dụng ArrayHelper vì vậy trước tiên hãy thêm nó vào vùng tên bằng cách
<?php
use yii\helpers\ArrayHelper;
?>
ArrayHelper có nhiều chức năng sử dụng đầy đủ có thể được sử dụng để xử lý mảng.
<?php
echo $form->field($model, 'name')->dropDownList(ArrayHelper::map(User::find()->all(),'id','username'),['prompt'=>'Select User']);
?>
không phải là một phần của biểu mẫu hoạt động
<?php
echo Html::activeDropDownList($model, 'filed_name',['1' => 'Yes', '0' => 'No']) ;
?>
hoặc là
<?php
$a= ['1' => 'Yes', '0' => 'No'];
echo Html::activeDropDownList($model, 'filed_name',$a) ;
?>
không phải là một biểu mẫu hoạt động mà là dữ liệu từ một bảng db
<?php
echo Html::activeDropDownList($model, 'filed_name',ArrayHelper::map(User::find()->all(),'id','username'),['prompt'=>'Select User']);
?>
Hãy xem cái này:
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-']) ?>
Có lẽ tôi sai nhưng tôi nghĩ rằng truy vấn SQL từ chế độ xem là một ý tưởng tồi
Đây là cách của tôi
Trong bộ điều khiển
$model = new SomeModel();
$items=ArrayHelper::map(TableName::find()->all(),'id','name');
return $this->render('view',['model'=>$model, 'items'=>$items])
Và trong Chế độ xem
<?= Html::activeDropDownList($model, 'item_id',$items) ?>
Hoặc sử dụng ActiveForm
<?php $form = ActiveForm::begin(); ?>
<?= $form->field($model, 'item_id')->dropDownList($items) ?>
<?php ActiveForm::end(); ?>
$this->view->params['items'] = $items;
và trang điểm của tôi<?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]);?>
<?= $form->field($model, 'attribute_name')->dropDownList(
ArrayHelper::map(Table_name::find()->all(),'id','field_name'),
['prompt' => 'Select']
) ?>
Điều này sẽ giúp bạn ... Đừng quên sử dụng tệp lớp trong tiêu đề.
use yii\helpers\ArrayHelper;
để có thể sử dụng trình trợ giúp.
Trong ActiveForm
chỉ sử dụng:
<?=
$form->field($model, 'state_id')
->dropDownList(['prompt' => '---- Select State ----'])
->label('State')
?>
Đây là về việc tạo ra dữ liệu và do đó được thực hiện đúng cách hơn từ mô hình. Hãy tưởng tượng nếu bạn muốn thay đổi cách dữ liệu được hiển thị trong hộp thả xuống, chẳng hạn như thêm họ hoặc một cái gì đó. Bạn phải tìm mọi hộp thả xuống và thay đổi arrayHelper
. Tôi sử dụng một hàm trong các mô hình của mình để trả về dữ liệu cho danh sách thả xuống, vì vậy tôi không phải lặp lại mã trong các chế độ xem. Nó cũng có lợi thế là tôi có thể chỉ định bộ lọc ở đây và áp dụng chúng cho mọi menu thả xuống được tạo từ mô hình này;
/* Model Standard.php */
public function getDropdown(){
return ArrayHelper::map(self::find()->all(), 's_id', 'name'));
}
Bạn có thể sử dụng cái này trong tệp xem của mình như thế này;
echo $form->field($model, 'attribute')
->dropDownList(
$model->dropDown
);
Nếu bạn đã đến cuối danh sách. Lưu một số mã php và chỉ cần đưa mọi thứ trở lại từ DB khi bạn cần như sau:
$items = Standard::find()->select(['name'])->indexBy('s_id')->column();
Html :: activeDropDownList ($ model, 'id', ArrayHelper :: map (AttendanceLabel :: find () -> all (), 'id', 'label_name'), ['prompt' => 'Trạng thái tham dự']) ;
Sau đây cũng có thể được thực hiện. Nếu bạn muốn thêm biểu tượng thêm trước. Điều này sẽ hữu ích.
<?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();?>