向CakePHP添加样式会自动创建输入div

usu*_*oio 4 css cakephp html-input cakephp-2.0

CakePHP创建一个div,它自动包装使用formhelper构建的任何输入标记,如下所示:

$this->formhelper->input('something');
Run Code Online (Sandbox Code Playgroud)

这样输出看起来如下:

<div class='input'>
    <input />
</div>
Run Code Online (Sandbox Code Playgroud)

我知道有一种方法可以将类添加到输入标记,即

$this->formhelper->input('text', array('class' => 'some_css'));
Run Code Online (Sandbox Code Playgroud)

但是如何为CakePHP自动创建的div添加样式.这可能是核心需要被黑客入侵的东西,但我想知道是否有更好的方法来做到这一点,所以我得到了如下内容:

<div class='input other_class_I_want_here'>
    <input />
</div>
Run Code Online (Sandbox Code Playgroud)

感谢任何能提供帮助的人.

小智 9

只需在div中添加一个新类.

$this->formhelper->input('text', array('div'=>array('class'=>'divClass'),'class' => 'some_css'));
Run Code Online (Sandbox Code Playgroud)

应该实际输出

<div class='input divClass'>
    <input class='other_class_I_want_here' />
</div>
Run Code Online (Sandbox Code Playgroud)


rob*_*pim 5

以上答案肯定是正确的.如果您只需要在一个(或几个)特定位置添加一个类,那么它的工作效果非常好.

然而,任何到达这里的人都在寻找一种方法来添加一个类来在整个应用程序范围内输入div包装器(例如:如果你使用的是前端框架,通常需要一个特定的类名,就可以添加到输入包装器中以启用自动样式)有一个MUCH更好的解决方案.那是一个自定义的FormHelper.

  1. 在App/View/Helper目录中创建并保存文件"MySuperCoolFormHelper.php"

  2. 将以下代码放在文件中:

    App::uses('FormHelper', 'View/Helper');

    class MySuperCoolFormHelper extends FormHelper {

        protected function _divOptions($options) {
            if(isset($options['div'])
                $options['div'] .= ' class1 class2 class3'; //note the prefixing space
            else
                $options['div'] = 'class1 class2 class3';

            return parent::_divOptions($options);
        }
    }
Run Code Online (Sandbox Code Playgroud)
  1. 要全局使用此新表单助手,请将以下代码添加到AppController:
    public $helpers = array(
        'Form' => array(
            'className' => 'MySuperCoolFormHelper'
        )
        //The rest of your helper inits
    );
Run Code Online (Sandbox Code Playgroud)

......和BLAMMO你做完了!