Yii - Füllen einer dropdown-Liste

Möchte ich, um eine Liste der productTypes aus der Datenbank und Ausgabe diese in eine dropdownlist, die dann verwendet werden, um ajax-füllen Sie eine zweite dropdown-Liste.

Schritt 1: Controller bekommt productTypes aus der Datenbank
Schritt 2: Controller wandelt die productTypes Objekt zu einer Liste
Schritt 3a: Output-Liste zu testen in Sicht
Schritt 3b: Füllen Sie eine dropdown-Liste mit dem list view

Snippet controller

public function init()
{

    $this->dynamicTypes();
    $this->render('calculator', array('types' => $this->_types));
}


public function dynamicTypes()
{
    $this->_types = CHtml::listData(ProductType::model()->findAll(), 'id', 'type');
}

View-Datei Snippet

<?php
    //Step 3a (this works fine)
    echo '<pre>';
        print_r($types);
    echo '</pre>';

    //Step 3b - Returns an error
    echo $form->dropDownList('productTypes',1, array($types));
?>

<?php $this->endWidget(); ?>

</div>

Mit Schritt 3b, ich habe versucht, die folgenden:

echo $form->dropDownList('productTypes',1, array($types));
Error Msg: get_class() expects parameter 1 to be object, string given

Laut http://www.yiiframework.com/doc/api/1.1/CHtml#dropDownList-detail, das dropDownList-Methode verwendet die folgenden Argumente:

public static string dropDownList(string $name, string $select, array $data, array $htmlOptions=array ( ))

wo das erste argument ist ein string, der angibt, der name des input-Feldes.

Was habe ich falsch gemacht und wie kann ich dieses Problem beheben?

UPDATE

echo CHtml::dropDownList('productTypes',1, array($types));

scheint zu funktionieren, aber wenn ich mir anschaue, die in der dropdown-Liste anzeigen, aus irgendeinem Grund, es gibt eine 0 in der dropdownlist. Für einige Grund, es ist, dass wir die Optionen in einer Optionsgruppe

<select name="productTypes" id="productTypes">
<optgroup label="0">
<option value="1">Scrap</option>
<option value="2">Coin</option>
<option value="3">Bar</option>
</optgroup>
</select>

GELÖST:
Entfernt array($types) ersetzt mit nur $types

echo CHtml::dropDownList('productTypes',1, $types);
Erhalten Sie eine gruppierte dropdown-weil Sie array($types) statt nur $types.

InformationsquelleAutor Gravy | 2013-05-08

Schreibe einen Kommentar