我对以前的问题看得很透彻,我很惊讶没有其他人问过这个问题,因为这看起来很简单。
如何使用CakePHP的FormHelper使标签包装输入和标签文本?我正在使用CakePHP 2.3.1。使用一些标准选项调用$this->Form->radio()
会产生:
<input id="input_id" type="radio" ... />
<label for="input_id">label text</label>
我正在寻找的是
<label for="input_id"><input type="radio" id="input_id" ... />label text</label>
我使用
实现了种$this->Form->input('input1',array('options'=>$options,'type'=>'radio',
'label'=>false
'before'=>'<label>',
'separator'=>'</label><label>',
'after'=>'</label>'
));
但显然这个解决方案并不理想。任何人都可以告诉我,CakePHP是否有更简单,更“合适”的方法来实现这一目标?
答案 0 :(得分:14)
我在试图找到自己的答案并解决它时遇到了这个问题。你不需要改变/扩展课程;它可以通过传递适当的选项来实现。
这就是我所做的,所以它适用于bootstrap:
$options = array(
'1' => 'One',
'2' => 'Two'
);
$attributes = array(
'class' => '',
'label' => false,
'type' => 'radio',
'default'=> 0,
'legend' => false,
'before' => '<div class="radio"><label>',
'after' => '</label></div>',
'separator' => '</label></div><div class="radio"><label>',
'options' => $options
);
echo $this->Form->input('myRadios', $attributes);
这会将每个无线电放入其自己的<div class="radio">
以符合引导标记。如果您只想要简单的标签包装,请移除div
,before
和after
separator
元素
答案 1 :(得分:4)
扩展帮助程序,并制作自己的方法。
<?php
// app/views/helpers/radio.php
class RadioHelper extends AppHelper {
function display($id, $options = array()) {
if (isset($options['options']) && !empty($options['options'])) {
$rc = "";
foreach ($options['options'] as $option) {
$rc .= "<label>";
$rc .= "<input ....>";
$rc .= "</label>";
}
return($rc);
}
return(false); // No options supplied.
}
}
?>
<?php
// some_controller.php
var $helpers = array('Radio');
?>
<?php
// some_view.ctp
echo $this->Radio->display('input1', array('options' => $options));
?>
请确保将表单助手中的逻辑复制到您自己的帮助程序中......
P.S。如果你只是添加一个方法,那么你不太可能需要一个完整的帮助器。只需将功能“display”添加到app_helper.php并从已加载的任何“其他”帮助程序中引用它,因为它们扩展了app_helper,您将在所有子帮助程序中使用显示方法。