2017-01-04 4 views
3

Ich verwende cakephp 3 und unter Verwendung von form-> Eingang() und benötigen eine Reihe von Optionen zu übergeben.Cakephp Formulareingabe mit Array-Optionen

Mein Array sieht wie folgt aus:

$ options = [ 'option1', 'option2', 'option3'];

Ich brauche die Werte dieser Optionen wie Etiketten. Problem ist, CakePHP verwendet Array-Index als Wert. Wenn also Option1 ausgewählt wird, werden die Werte 0. Ich brauche den Wert als Option1.

Edit:

Vorerst habe ich das Array geändert wie folgt aussehen:

$ options = [ 'option1' => 'option1', 'option2' => 'option2 ',' Option3 '=>' Option3 '];

Es funktioniert, aber immer noch aus Neugier, gibt es einen anderen Weg?

+0

Können Sie Array wie machen: $ Optionen = Array ( 'Option1' => 'Option1', 'Option2' => 'Option2', 'Option3' => 'Option3' ); –

Antwort

1

Dies ist, weil der Schlüssel Array der Wert und der Wert der Array wird das Etikett/Text für die Anzeige im Auswahlfeld wird. Optionen basieren auf Schlüssel/Wert-Paaren. z.B.

$options=['option1'=>'option1', 'option2'=>'option2', 'option3'=>'option3']; 
echo $this->Form->select(
'field', 
[1, 2, 3, 4, 5], 
['empty' => '(choose one)'] 
); 

Wird

<select> 
<option value='option1'>Option1</option> 
... 
<option value='option2'>Option2</option> 


<select name="field"> 
    <option value="">(choose one)</option> 
    <option value="0">1</option> 
    <option value="1">2</option> 
    <option value="2">3</option> 
    <option value="3">4</option> 
    <option value="4">5</option> 
</select> 
+0

Ich verstehe den Grund, auf der Suche nach Möglichkeiten, um es zum Funktionieren zu bringen .. – Sourabh

+0

aber es funktioniert jetzt und in Frage Sie fragen den Grund. – Deep

+0

Aus Neugierde frage ich, ob wir es so machen können. – Sourabh

4

Try this:

Kontroller

$options = $this->YourModel->find('list', ['keyField' => 'name', 'valueField' => 'name']); 

$this->set(compact('options')); 

More info about Finding Key/Value Pairs

In View

<?= $this->Form->input('field', ['options' => $options ,'label' => 'Fields']); ?> 

oder

<?= $this->Form->select('field', $options); ?> 

More info about FormHelper

2

schrieb ich mit dieser Situation ein paar kleinen Helferfunktionen für den Umgang.

function make_option($value) { 
    if (is_numeric($value)) { 
     return $value; 
    } else { 
     // Translate string values 
     return __($value); 
    } 
} 

function make_options($values) { 
    if (empty($values)) { 
     return []; 
    } 
    return array_combine($values, array_map('App\Config\make_option', $values)); 
} 

Sie dann

$options = make_options(['option1', 'option2', 'option3']); 

Wenn Übersetzung für Sie kein Problem ist, kann die Rückkehr von Ihrer Version von make_options vereinfacht werden verwenden würde nur array_combine($values, $values); und make_option ganz weg gehen kann.

Verwandte Themen