4

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>

感谢任何可以提供帮助的人。

4

3 回答 3

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>
于 2013-10-16T15:39:56.767 回答
5

上面的答案当然是正确的。如果您只需要在一个(或几个)特定位置添加一个类,则效果很好。

但是,任何到达这里的人都在寻找一种将类添加到应用程序范围内的输入 div 包装器的方法(例如:如果您使用的前端框架通常需要将特定的类名添加到输入包装器以启用自动样式) 有一个更好的解决方案。也就是说,一个自定义的 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);
        }
    }
  1. 要全局使用这个新的表单助手,请将以下代码添加到您的 AppController:
    public $helpers = array(
        'Form' => array(
            'className' => 'MySuperCoolFormHelper'
        )
        //The rest of your helper inits
    );

   

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

于 2014-01-03T16:03:11.167 回答
0

CakePHP 3:用于将“form-group”应用于 DIV 并将“form-control”应用于输入字段

<?= 
$this->Form->control('year', [
    'type' => 'select', 
    'value' => $year, 
    'options' => $years, 
    'label' => false, 
    'class' => 'form-control', 
    'templates' => ['inputContainer' => '<div class="form-group">{{content}}</div>']
    ]); 
?>
于 2019-05-24T13:28:10.353 回答