CakePHP创建单选按钮

CakePHP创建单选按钮,cakephp,Cakephp,如何创建两个单选按钮,并根据$foo的值预选一个?下面的代码段可以很好地创建它们,但没有选择这两个按钮中的任何一个 $options = array('standard' => ' Standard','pro' => ' Pro'); $attributes = array( 'legend' => false, 'value' => false, 'checked'=> ($foo == "pro") ? FALSE : TRUE, );

如何创建两个单选按钮,并根据$foo的值预选一个?下面的代码段可以很好地创建它们,但没有选择这两个按钮中的任何一个

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

您应该从控制器中预选任何表单字段的值

@请参阅“默认值”

这是一条路要走

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

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

    echo $this->Form->radio('type', $options, $attributes); 
更好的解决方案是在控制器中设置Mark指出的默认值。这样,您就可以在控制器操作结束时设置默认值,如

假设您的模型是
成员
,带有
成员类型字段

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

这很简单。。使用$foo的默认值:

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

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

echo $this->Form->radio('type', $options, $attributes);
正如您在文档中看到的:


对于CakePHP 3.x,以下语法应该可以使用

$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

好吧,所有这些都以书面形式为您准备好了:在您的操作集中的ELSE块中:$this->data[Model][field]=defaultvalue(在您的例子中是'standard'或'pro')。请在下一个问题中提到您的cakephp版本!因为对于2.0来说,它将是$this->request->data-但是在不知道您使用的版本的情况下,很难为您提供精确的解决方案。因此,我只能通过在控制器中放置代码来预选单选按钮,而生成单选按钮的实际标记在视图中?我使用的是1.3,您可以随时使用该视图(有一些风险——关键词“验证错误”和“持久表单”)。我想说的是(请仔细阅读这篇文章)你不应该那样做。毕竟,这就是控制器的作用所在——有关详细信息,请参见对另一个答案的注释。在2.0中,似乎至少可以使用“default”(“value”肯定会破坏您的表单)。我刚试过。但我还是不喜欢。马克,蒂塔克的答案对我来说很有用,但我知道这并不理想。我无法让您的解决方案工作,我想是因为我正在用不同于生成表单的函数处理表单,所以我没有您文章中提到的这个{}块。我不同意。可以有多个状态的字段的默认值是逻辑的一部分,应该由控制器提供(您的解决方案看起来像是开销,可能也会在验证失败时中断)。视图级别唯一适用的用例是:如果默认值/值固定为特定值(始终保持不变)。是的,显然更好的方法是使用控制器。但这只是一个可能的解决方案,因为OP没有询问使用哪种方法。我已经更新了帖子,谢谢你指出。a)他使用的是1.3-b)这个答案破坏了“持久形式”的概念。你自己试试看。张贴此表格并亲自查看。如果有任何问题,您可以使用表单参数“default”而不是“value”。value=始终相同的值-default=一旦发布并使表单无效,表单将保留以前选择的值(尽管默认值不同)。这就是为什么只应该使用默认值。还有一个布尔收音机?其中,输入数据库值为布尔类型,但cake(或PDO)显示“f”和“t”?我无法获取te布尔值来设置正确的单选选项(在edit.cpt上)。请注意,在CakePHP 2.x中,我不确定这种语法是否仍然有效。这只是一个关于这个问题的任何人的头像。