2013-02-24 4 views
0

я играл вокруг с CakePHP в последнее время и столкнулся с следующей проблемой:CakePHP - Set Select Text в качестве значения

при использовании формы помощника для создания представлений я делал следующее для вывода выберите

echo $this->Form->input('fee', array(
     'empty' => '---', 
     'options' => array(
     __('Yes'), 
     __('No')) 
    )); 

я подготовил ниточки, чтобы быть готовым к i18n, так вот почему они объявлены с __ (»«)

таким образом, она прекрасно работает - и его генерации следующий код:

<div class="input select"> 
<label for="GameFee">Fee</label> 
<select name="data[Game][fee]" id="GameFee"> 
<option value="">---</option> 
<option value="0">Yes</option> 
<option value="1">No</option> 
</select> 
</div> 

Но торт - как обычно - принимает идентификаторы в качестве значения. Как я могу заставить торт взять описание поля как значение, как

Да

В поле «плата» в таблице «игры» состоит из VARCHAR (100)

Надеется, что вы можете помочь :)

ответ

1

Я бы этого не сделал! На данный момент торт не поддерживает перечисление из коробки. Но есть много вариантов, чтобы обойти это - и некоторые из них обычно лучше, чем использование перечислений в первую очередь.

В вашем случае я удивляюсь, почему вы хотите перечислить здесь? Его явно логическое значение (два состояния: 0 или 1, да или нет). Поэтому я всегда буду хранить это логическое значение с помощью tinyint1.

Вы должны хранить базовую информацию здесь (0 или 1) в базе данных по низкой цене (ничто по сравнению со всей строкой) и низким ошибкам регрессии и только переводить/интерпретировать ее на выходе (например, на ваш взгляд).

Если вам действительно нужно более двух определенных состояний, например, http://www.dereuromark.de/2010/06/24/static-enums-or-semihardcoded-attributes/. Вы можете легко добиться того, что вы хотите, прикрепляя к вашему tinyint2 полю здесь:

$this->Form->input('fee', array('options' => Model::fees())); 

Во всяком случае, чтобы ответить на ваш вопрос: Если вы действительно должны сохранить строку здесь, убедитесь, что он является частью ключа или отобразить его это в контроллере до сохранения.

'options' => array(
    __('Yes') => __('Yes'), 
    __('No') => __('No')) 
+0

Благодарим вас за ответ. Вы правы - я рассмотрю решение tinyint :). Я новичок в программировании, поэтому я еще не создал большую базу знаний, и я благодарен за каждый намек. – Dreshar