2015-04-07 1 views
0

Я пытаюсь установить значение по умолчанию для поля выбора в CakePHP. Мои параметры доступны при использовании статической функции в модели, которая определяется как такВызов функции статической модели с контроллера в cakePHP

public static function purpose($value = null) 
{ 
    $options = array(
     self::PURPOSE_HOMECONSUMPTION => __('Home Consumption', true), 
     self::PURPOSE_COMMERCIAL => __('Commercial', true) 
    ); 
    return self::enum($value, $options); 
} 

// Constants for status attribute 
const PURPOSE_HOMECONSUMPTION = '0'; 
const PURPOSE_COMMERCIAL = '1'; 

На мой взгляд, я заполнить поле выбора, вызвав эту статическую функцию таким образом

echo $this->Form->input('purpose', array(
    'type' => 'select', 
    'options' => Field::purpose() 

достаточно его Sure выбирает параметры, но значение по умолчанию - Home Consumption. Я хочу установить его Commercial. Я пробовал что-то подобное в контроллере

$this->request->data['Field']['purpose'] = Field::purpose(1); 

Но это не работает. Любые идеи о том, как я могу вызвать статическую функцию в контроллере со значением, установленным на Commercial.

+0

Похож на мои статические enums ..: P – mark

+0

Почему бы не использовать опцию 'default' для ввода? – arilia

+0

@arilia Значения по умолчанию (исходящие из слоя модели) IMO являются частью логической ИМО и должны находиться в разделе else контроллера. – mark

ответ

3

Почему вы используете константы класса, а затем НЕ используете их в коде? Не имеет смысла для меня.

Вы находитесь на верхнем уровне, определяя целочисленное значение в строке. Это также не имеет смысла, если вы хотите использовать его как значение по умолчанию для раскрывающегося списка, заполненного данными enum.

Правильный подход, логически, будет:

// The constant that holds the value 1 
$this->request->data['Field']['purpose'] = ModelName::PURPOSE_COMMERCIAL; 

Также отметим, что константы должны лучше быть реальными целыми числами, и вы должны использовать TINYINT (2) для данного типа БД, как указано в коде блога.

+0

Опция данных запроса не будет работать, потому что она будет пустой. Трюк будет устанавливать значение по умолчанию при возможности получить список опций. Я не уверен, как это сделать правильно? –

+0

Использование вышеуказанного подхода. Вы не можете вызвать 'ModelName', потому что он скажет, что класс не найден. Во всяком случае, я не уверен, как это сделать. –

+0

параметр данных запроса правильный, но по какой-то причине он не смог загрузить класс модели, поэтому я использовал '$ this-> loadModel ('Field')', хотя это не имеет смысла, так как я в полевом контроллере. –