Como fazer um dropdown
em yii2
usando um activeform
e um modelo? Já que todos os métodos mudaram em yii2
, como isso é feito no novo?
php
drop-down-menu
yii2
Dency GB
fonte
fonte
Respostas:
É como
<?php use yii\helpers\ArrayHelper; use backend\models\Standard; ?> <?= Html::activeDropDownList($model, 's_id', ArrayHelper::map(Standard::find()->all(), 's_id', 'name')) ?>
O ArrayHelper no Yii2 substitui os dados da lista CHtml no Yii 1.1. [Carregue os dados do array do seu controlador]
EDITAR
Carregue dados de seu controlador.
Controlador
$items = ArrayHelper::map(Standard::find()->all(), 's_id', 'name'); ... return $this->render('your_view',['model'=>$model, 'items'=>$items]);
Em vista
<?= Html::activeDropDownList($model, 's_id',$items) ?>
fonte
Parece que você já encontrou sua resposta, mas como mencionou o formulário ativo, contribuirei com mais um, mesmo que seja um pouco diferente.
<?php $form = ActiveForm::begin(); echo $form->field($model, 'attribute') ->dropDownList( $items, // Flat array ('id'=>'label') ['prompt'=>''] // options ); ActiveForm::end(); ?>
fonte
.on('change')
evento em jquery para preencher o segundo campo com base na seleção do primeiro.Existem algumas boas soluções acima, e a minha é apenas uma combinação de duas (vim aqui em busca de uma solução).
A solução de @Sarvar Nishonboyev é boa porque mantém a criação do rótulo de entrada do formulário e bloco de ajuda para mensagens de erro.
Eu fui com:
<?php use yii\helpers\ArrayHelper; use app\models\Product; ?> <?= $form->field($model, 'parent_id') ->dropDownList( ArrayHelper::map(Product::find()->asArray()->all(), 'parent_id', 'name') ) ?>
Mais uma vez, crédito total para: @Sarvar Nishonboyev's e @ippi
fonte
Parece que há muitas respostas boas para essa pergunta. Portanto, tentarei dar uma resposta detalhada
formulário ativo e dados codificados
<?php echo $form->field($model, 'name')->dropDownList(['1' => 'Yes', '0' => 'No'],['prompt'=>'Select Option']); ?>
ou
<?php $a= ['1' => 'Yes', '0' => 'No']; echo $form->field($model, 'name')->dropDownList($a,['prompt'=>'Select Option']); ?>
formulário ativo e dados de uma tabela db
vamos usar ArrayHelper, então primeiro adicione-o ao espaço de nomes
<?php use yii\helpers\ArrayHelper; ?>
ArrayHelper tem muitas funções completas de uso que podem ser usadas para processar arrays map () é o que vamos usar aqui, esta função ajuda a fazer um mapa (de pares chave-valor) a partir de um array multidimensional ou um array de objetos.
<?php echo $form->field($model, 'name')->dropDownList(ArrayHelper::map(User::find()->all(),'id','username'),['prompt'=>'Select User']); ?>
não faz parte de um formulário ativo
<?php echo Html::activeDropDownList($model, 'filed_name',['1' => 'Yes', '0' => 'No']) ; ?>
ou
<?php $a= ['1' => 'Yes', '0' => 'No']; echo Html::activeDropDownList($model, 'filed_name',$a) ; ?>
não um formulário ativo, mas dados de uma tabela db
<?php echo Html::activeDropDownList($model, 'filed_name',ArrayHelper::map(User::find()->all(),'id','username'),['prompt'=>'Select User']); ?>
fonte
Dê uma olhada nisso:
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-']) ?>
fonte
Talvez eu esteja errado, mas acho que a consulta SQL do modo de exibição é uma má ideia
Esta é a minha maneira
No controlador
$model = new SomeModel(); $items=ArrayHelper::map(TableName::find()->all(),'id','name'); return $this->render('view',['model'=>$model, 'items'=>$items])
E em vista
<?= Html::activeDropDownList($model, 'item_id',$items) ?>
Ou usando ActiveForm
<?php $form = ActiveForm::begin(); ?> <?= $form->field($model, 'item_id')->dropDownList($items) ?> <?php ActiveForm::end(); ?>
fonte
$this->view->params['items'] = $items;
e na minha página de visualização<?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'] ) ?>
Isso ajudará você ... Não se esqueça de usar o arquivo de classe no cabeçalho.
fonte
use yii\helpers\ArrayHelper;
para poder usar o helper.Em
ActiveForm
uso apenas:<?= $form->field($model, 'state_id') ->dropDownList(['prompt' => '---- Select State ----']) ->label('State') ?>
fonte
Trata-se de gerar dados e, portanto, é feito de forma mais adequada a partir do modelo. Imagine se você alguma vez quisesse alterar a forma como os dados são exibidos na caixa suspensa, digamos, adicionar um sobrenome ou algo assim. Você teria que localizar cada caixa suspensa e alterar o
arrayHelper
. Eu uso uma função em meus modelos para retornar os dados para uma lista suspensa, então não preciso repetir o código nas visualizações. Também tem a vantagem de poder especificar o filtro aqui e aplicá-los a todos os menus suspensos criados a partir deste modelo;/* Model Standard.php */ public function getDropdown(){ return ArrayHelper::map(self::find()->all(), 's_id', 'name')); }
Você pode usar isso em seu arquivo de visualização assim;
echo $form->field($model, 'attribute') ->dropDownList( $model->dropDown );
fonte
Se você chegou ao fim da lista. Salve algum código php e traga tudo de volta do banco de dados conforme necessário, como isto:
$items = Standard::find()->select(['name'])->indexBy('s_id')->column();
fonte
Html :: activeDropDownList ($ model, 'id', ArrayHelper :: map (AttendanceLabel :: find () -> all (), 'id', 'label_name'), ['prompt' => 'Status de atendimento']) ;
fonte
O seguinte também pode ser feito. Se você deseja anexar o ícone prefixar. Isso será útil.
<?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();?>
fonte