我得到了设计师的主题,我被指派将其与产品集成。由于源代码方面的产品规模很大,我必须修改几乎所有的视图和布局。此外,该产品的开发将在未来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>
这是文本框的一个示例。请先帮助,谢谢。
答案 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框架。我建议你使用这个插件:
答案 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部分