I am having problem displaying values set by select elements created by FormHelper. I have searched the internet but doesn’t seem to be able to find the answer. Here is the scene:
I have a questionnaire form that has many options. In the model I put those items into an array, say ($frequencyOptions) and when formhelper is used,
$this->Form->input('frequency',array("options"=> $frequencyOptions));
Currently, the option value is the array index, which looks like:
<option value="">(choose one)</option>
<option value="0">Rare</option>
<option value="1">Frequent</option>
<option value="2">Moderate</option>
Of course I know that if I set the key as well when constructing the $frequencyOptions variable like
$frequencyOptions = array("Rare" => "Rare", ...
I will be able to store the value in text.
However, since some of these options are very very long, I would prefer to save them in INT in the database.
Yet the challenge I have at this moment is how to display those fields in the “list” in the index page. When I use the form field to display in the view or edit action, it is okay because the select element will be used again. However, if I want to display it in plain text, how should I “translate” it?
One thing I can think of is to create these “conversion” methods in the Model, but I think calling model method in views is not a good practice in MVC.
Any idea?
I’d think adding a method to your Model would be the way to go. How about this:
And then it should display the human-readable value when passed to the index page. If preferred, the above method could be changed so it works on
$this->datainside the Model.Note: The method has to be changed if it should work for a single record data array as well.