如何覆盖Cakephp的默认HTML Helper?

时间:2013-12-04 10:58:36

标签: php html css cakephp helper

我得到了设计师的主题,我被指派将其与产品集成。由于源代码方面的产品规模很大,我必须修改几乎所有的视图和布局。此外,该产品的开发将在未来2年进行,这是计划。

我正在尝试覆盖Cakephp的HTML Helper类,以便它将更改css的所有默认类。由于这种策略,开发人员不必为观点付出更多努力,它将简化未来的开发。 现在

echo $this->Form->input('username');

生成

<div class="input text required">
    <label for="username">Username</label>
    <input id="username" type="text" required="required" maxlength="30" name="data[User][username]">
</div>

我希望通过覆盖HTML Helper来实现这一点。

<div class="form-group has-error">           
    <label for="inputError" class="control-label">Input with error</label>
    <input type="text" id="username" class="form-control" name=" data[User][username]" required="required">                           
</div>

这是文本框的一个示例。请先帮助,谢谢。

3 个答案:

答案 0 :(得分:2)

我认为你无法覆盖它。但是你可以构建另一个帮助扩展 FormHelper。

我曾经这样做过一次,使用Bootstrap css内置类更简单地处理表单创建过程。

class BFormHelper extends FormHelper {

    public function label($fieldName = null, $text = null, $options = array()){
        $myOptions = array('class' => 'control-label');
        return parent::label($fieldName, $text, array_merge($options, $myOptions));
    }
}

这样我们封装了CSS类control-label的使用,如果需要更改它,我们只需要在一个地方进行。

然后,在视图上你只需:

<?= $this->BForm->label('somefield', 'Some bootstrap field') ?>

我做的CakePHP版本是1.3。

答案 1 :(得分:1)

看起来你正在使用bootstrap css框架。我建议你使用这个插件:

http://slywalker.github.io/cakephp-plugin-boost_cake/

答案 2 :(得分:0)

为了生成上面的代码,您可以随时使用核心FormHelper

<?php
echo "<div class=\"form-group has-error\">."
    . $this->Form->label('username', '<your-text-goes-here>', array('class' => 'control-label'))
    . $this->Form->input('username', array('class' => 'form-control', 'label' => false, 'div' => false))
    . "</div>\n";
?>

核心FormHelper可以完全自定义以满足您的需求。但这种方式意味着你的意志必须付出额外的努力。请阅读cakebook中有关如何自定义核心FormHelper的相应部分。

如果要最小化视图中的代码,可以创建自定义表单帮助程序 如下面给出的样本。

<?php
class CustomformHelper extends AppHelper {
    public $helpers = array('Form');

    public function customInput(<your-options-goes-here>) {
        /* Write your custom code for the specific type of input
         * you want to create. */
    }
};
?>

在自定义帮助程序中,您可以通过定义来引入任何其他核心帮助程序 $helpers数组,就像你在控制器中一样。

您在$helpers数组中定义的所有核心助手都可以使用$this。 例如,如果您想在自定义方法中调用FormHelper::input()方法,则可以使用以下代码:$this->Form->input(...)

另请参阅蛋糕书中的how to create custom helpers部分