# 09 Nog een drop down
*We gaan nog een keer stap-voor-stap alle stappen uitvoeren om nog een drop down in bestelling te maken.*
### Opdracht 9
Maak nu een drop down voor de bestelling zodat de medewerker
uit een lijstje van koffiesoorten kan kiezen bij het opnemen van
de bestelling.
[](https://www.roc.ovh/uploads/images/gallery/2021-03/image-1616605448841.png)
Gebruik hiervoor het stappenplan dat hieronder is beschreven.
|
#### Het stappenplan voor een drop down
Schrijf eerst het volgende op:
In welk model komt de drop down? Dit noemen we de target.
(in opdracht 2 hierboven is dat *Bestelling*)
Waar komt de informatie voor de Drop Down uit? Dit noemen we de source.
(in opdracht 2 hierboven is dat *Menu*)
#### Voer nu de stappen 1-6 uit
1. Zet in de target controller welke source model we willen gebruiken.
```
// in controller van target
use app\models\;
```
2. Haal in de target controller in de actionCreate() de informatie uit de source op.
```
// sourceName bedenk jij zelf en daarin staat de informatie die in de drop down moet komen.
$sourceName = source::find()->all();
```
3. Geef vanuit de target controller in de actionCreate() de informatie door aan de view.
```
return $this->render('create', [
'sourceName' => $sourceName,
....
]);
```
4. Open de view create in de target (view) en geef de informatie door aan \_form view.
```
= $this->render('_form', [
'sourceName' => $sourceName,
...
]);
```
5. Open de view \_form in de target (view) en zet de informatie om in een assiociative array
```
// in dit voorbeeld worden id en naam gebruikt:
// id is het veld dat moet worden opgeslagen
// naam is het veld dat in de drop te zien is
$sourceNameList = ArrayHelper::map($sourceName,'id','naam');
```
6. Pas het invoerveld aan in de \_form van de target (view).
```
// veld_in_de_db is het veld van de target dat in dit invoerveld wordt weggeschreven.
= $form->field($model, 'veld_in_de_db')->dropDownList($$sourceNameList, ['prompt' => '']) ?>
```
Als je alles correct gedaan hebt dan moet je nog 1 regel aanpassen in de code om de functionaliteit te gebruiken. Yii controleert automatisch of alle databasekolommen zijn ingevuld in het formulier. Dit controleren wordt *validatie* genoemd. Deze regels staan in het model. Omdat je geen Bestelling ID opgeeft bij het maken van een bestelling moet je deze requirement verwijderen op regel 33 van model Bestelling.
```PHP
return [
[ ['naam', 'medewerker_id', 'menu_id', 'status'], 'required'],
...
...
]
```
### Inleveren
1. schermafdruk yii-09-jouw-naam met het form waarin je de drop down van de producten (opengeklapt) laat zien. Maak een schermafdruk van je gehele browser.
2. de *BestellingController.php* en zet jouw naam bij de aanpassingen die je hebt gedaan.
\--