使用CakePHP的FormHelper自定义输入HTML

时间:2012-05-07 00:26:58

标签: cakephp

我正在尝试使用CakePHP的表单助手来生成一些输入元素。

我想要生成的HTML是:

<div class="formRow">
    <label>LabelText:</label>
    <div class="formRight">
        <input name="data[User][email_address]" type="text" value="">
    </div>
    <div class="clear"></div>
</div>

我看了一下Cake文档(使用2.1),我找不到有关如何执行此操作的足够信息。

看起来我需要在输入法上使用format选项,但无法弄清楚如何正确使用它。特别关注输入字段周围的div,上面有一个类名。

E.g。我尝试过这样的事情:

echo $this->Form->input('email_address', array(
                                                "input" => array('attributes' => array('wrap' => 'div','class' => 'formRight'))));

但这并没有改变任何标记,只是抛出这个错误:    注意(8):数组到字符串转换[CORE \ Cake \ View \ Helper.php,第459行]

所以我的问题是如何让这个表单助手创建该标记?

任何帮助非常感谢

2 个答案:

答案 0 :(得分:15)

你过分思考它。 (不用担心,我们都这样做)。请记住,CakePHP是为了让事情变得更容易(除其他事项外) - 如果你正在努力强迫Cake为你做点什么,请记住,你可以回归基础 - 它只是PHP / HTML后所有

<div class="formRow">
    <label>LabelText:</label>
    <div class="formRight">
        <?php echo $this->Form->input('email_address', array(
            'div'=>false, 'label'=>false)); ?>
    </div>
    <div class="clear"></div>
</div>

您应尽可能使用表单助手为您的表单,但您不必使用所有的预设,如周围的div和&amp;标签。在上面的例子中,告诉它你不想要div,并用div自己包装它。

如果您不想在任何输入周围<div><label> s,您还可以设置表单的inputDefaults:

$this->Form->create('Whatever', array(
    'inputDefaults' => array('label'=>false, 'div'=>false)
));

答案 1 :(得分:0)

如果你有很多字段,可以使用Jquery。

PHP:

echo $this->Form->input('email_address', array('class' => 'formRow'));

Jquery的:

$(".formRow").each(function() {
    $(this).wrapInner( "<div class='formRight'></div>");
    $(this).find("label").prependTo(this);
    $(this).append('<div class="clear"></div>');
});