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

时间:2013-10-16 15:27:42

标签: css cakephp cakephp-2.0 html-input

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

$this->formhelper->input('something');

这样输出看起来如下:

<div class='input'>
    <input />
</div>

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

$this->formhelper->input('text', array('class' => 'some_css'));

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

<div class='input other_class_I_want_here'>
    <input />
</div>

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

3 个答案:

答案 0 :(得分:9)

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

$this->formhelper->input('text', array('div'=>array('class'=>'divClass'),'class' => 'some_css'));

应该实际输出

<div class='input divClass'>
    <input class='other_class_I_want_here' />
</div>

答案 1 :(得分:5)

上述答案肯定是正确的。如果您只需要在一个(或几个)特定位置添加课程,那就可以很好地工作。

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

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

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

  4.   
    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);
        }
    }
  
      
  1. 要全局使用此新表单助手,请将以下代码添加到AppController:
  2.   
    public $helpers = array(
        'Form' => array(
            'className' => 'MySuperCoolFormHelper'
        )
        //The rest of your helper inits
    );

...和BLAMMO你已经完成了!

答案 2 :(得分:0)

CakePHP 3: 用于将“表单组”应用于DIV,并将“表单控制”应用于输入字段

<?= 
$this->Form->control('year', [
    'type' => 'select', 
    'value' => $year, 
    'options' => $years, 
    'label' => false, 
    'class' => 'form-control', 
    'templates' => ['inputContainer' => '<div class="form-group">{{content}}</div>']
    ]); 
?>