4

我已经非常彻底地查看了以前的问题,我很惊讶没有其他人问过这个问题,因为这似乎是一件非常简单的事情。

如何使用 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 是否有更简单和“更合适”的方法来实现这一目标?

4

2 回答 2

14

我在尝试自己找到答案并解决它时遇到了这个问题。您不需要更改/扩展课程;它可以纯粹通过传递适当的选项来实现。

这就是我所做的,因此它适用于引导程序:

$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">位置,以符合引导标记。如果您只想要简单的标签包装,请divbefore,afterseparator

于 2013-10-16T10:46:50.633 回答
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));

?>

只需确保将表单助手中的逻辑复制到您自己的助手中...

PS如果你只是添加一个方法,你不太可能需要一个完整的助手。只需将函数“display”添加到 app_helper.php 并从您已加载的任何“其他”助手中引用它,因为它们扩展了 app_helper,您将在所有子助手中使用 display 方法。

于 2013-03-27T02:51:00.063 回答