2012-02-09 2 views
9

Как создать два переключателя с одним из предварительно выбранных на основе значения $ foo? Ниже представлен сниппет, но он не выбирает ни одну из двух кнопок.CakePHP создает радиокнопки

$options = array('standard' => ' Standard','pro' => ' Pro'); 
$attributes = array(
    'legend' => false, 
    'value' => false, 
    'checked'=> ($foo == "pro") ? FALSE : TRUE, 
); 
echo $this->Form->radio('type',$options, $attributes); 

ответ

23

Это просто .. использовать значение по умолчанию для $ Foo:

$options = array(
    'standard' => 'Standard', 
    'pro' => 'Pro' 
); 

$attributes = array(
    'legend' => false, 
    'value' => $foo 
); 

echo $this->Form->radio('type', $options, $attributes); 

Как вы можете видеть на документации:

http://book.cakephp.org/2.0/en/core-libraries/helpers/form.html#FormHelper::radio

+0

а) он использует 1.3 - б) этот ответ разрушает идею «постоянных форм». попробуйте сами. отправьте эту форму и убедитесь сами. если что угодно, вы можете использовать форму param «default» вместо «value». – mark

+0

Я подтверждаю, что работает «по умолчанию», так что «значение». – stef

+0

value = всегда одно и то же значение - по умолчанию = после его публикации и аннулирования формы сохраняет ранее выбранное значение (несмотря на другое значение по умолчанию).поэтому следует использовать только дефолт. – mark

3

вы должны предварительно выбрать значение для любого поля формы от контроллера

@see http://www.dereuromark.de/2010/06/23/working-with-forms/ "Значения по умолчанию"

+0

К сожалению, я не вижу, как эта ссылка решает эту проблему. – stef

+0

ну, все это выложили для вас там в письменной форме: в блоке ELSE в вашем наборе действий: $ this-> data [Model] [field] = defaultvalue (в вашем случае «стандартное» или «pro»). и, пожалуйста, укажите ваш вариант cakephp в следующем вопросе! потому что для 2.0 это будет $ this-> request-> data, но без знания версии, которую вы используете, сложно предоставить вам точное решение. – mark

+0

Итак, я могу только предварительно выбрать переключатель, поставив код в контроллер, а фактическая разметка для генерации радио находится в представлении? Я использую 1.3 – stef

1

Это путь

$attributes = array(); 
    $options = array('standard' => 'Standard', 'pro' => 'Pro'); 

    if($foo === 'pro') { 
     $attributes['default'] = 'pro'; 
    } 

    echo $this->Form->radio('type', $options, $attributes); 

лучшее решение, - установить значения по умолчанию в контроллере по указанию Mark. Таким образом, вы можете установить по умолчанию в конце действия вашего контроллера как ...

Давайте предположим, что ваша модель Member с membership_type field

$this->data['Member']['membership_type '] = 'pro'; 
+0

Я не согласен. значения по умолчанию для полей, которые могут иметь более одного состояния, являются частью логики и должны предоставляться с контроллера (ваше решение кажется накладным и, вероятно, также нарушит отказ проверки). единственный вариант использования, в котором он соответствует уровню представления: если значение по умолчанию/значение привязано к определенному значению (всегда остается неизменным). – mark

+0

Да, конечно, лучший способ сделать это - в контроллере. но это всего лишь возможное решение, поскольку OP не спрашивает, какой метод использовать. Я обновил сообщение, спасибо за указание. – Ehtesham

0
$options = array('Y'=>'Yes','N'=>'No'); 

$attributes = array('div' => 'input', 'type' => 'radio', 'options' => $options, 'default' => 'Y'); 

echo $this->Form->input('add to business directory',$attributes); 

НТН

+0

Просто голова, в CakePHP 2.x Я не уверен, что это так, что этот синтаксис все равно будет работать. Просто голова любого, кто приходит к этому вопросу. – usumoio

Смежные вопросы