2012-02-09 149 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

a)他正在使用1.3 - b)这个答案正在破坏“持久化形式”的想法。自己尝试一下。张贴这张表格并亲自查看。如果有的话,你可以使用表单参数“default”而不是“value”。 – mark 2012-02-10 14:47:17

+0

我确认“默认”作品,“价值”也一样。 – stef 2012-02-10 15:10:36

+0

value =始终是相同的值 - default =一旦发布并且使表单失效,则保持先前选择的值(尽管具有不同的默认值)。这就是为什么只应该使用默认值。 – mark 2012-02-10 20:36:08

3

你应该预选值任何形式的字段从控制器

@see http://www.dereuromark.de/2010/06/23/working-with-forms/ “默认值”

+0

对不起,我没有看到该链接是如何解决这个问题。 – stef 2012-02-09 11:09:26

+0

好吧,它的所有内容都以书面形式呈现给您:在您的动作集中的ELSE块中:$ this-> data [Model] [field] = defaultvalue(在您的案例中为'standard'或'pro')。并请在下一个问题中提及你的cakephp版本!因为对于2.0而言,它会是$ this-> request-> data--但是不知道您正在使用的版本,因此很难为您提供确切的解决方案。 – mark 2012-02-09 11:17:59

+0

所以我只能通过在控制器中放置代码来预选一个单选按钮,而生成无线电的实际标记在视图中?我正在使用1.3 – stef 2012-02-10 14:14:30

1

这是去

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

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

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

更好的解决方式是在Mark指出的控制器中设置默认值。这样,你可以在你的控制器的作用就像结束设置默认值...

让我们假设你的模型是Membermembership_type field

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

我不同意。可以具有多个状态的字段的默认值是逻辑的一部分,应该由控制器提供(您的解决方案看起来像开销一样,并且可能在验证失败时也会中断)。唯一的视图级别适用的用例:如果默认值/值固定为特定值(始终保持不变)。 – mark 2012-02-09 14:28:24

+0

是的,显然这样做的更好方法是在控制器中。但这仅仅是一个可能的解决方案,因为OP没有询问使用哪种方法。我已更新该帖子,谢谢指出。 – Ehtesham 2012-02-09 14:41:43

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); 

HTH

+0

只是在CakePHP 2.x中,我不确定这种情况是否仍然有效。只是想到了这个问题的任何人。 – usumoio 2013-04-04 17:56:10