使用CakePHP FormHelper和Bootstrap Forms

ler*_*son 30 php cakephp twitter-bootstrap

CakePHP的FormHelper是在制作CakePHP应用程序时生成表单的方式.可以假设,这包括生成输入元素,如下所示:

$this->Form->input('abc');
Run Code Online (Sandbox Code Playgroud)

哪个会产生这样的HTML:

<div class="input text">
  <label for="ModelAbc">Abc</label>
  <input name="data[Model][Abc]" class="" maxlength="250" type="text" id="ModelAbc">
</div>
Run Code Online (Sandbox Code Playgroud)

现在,遗憾的是,Bootstrap需要以下内容:

<div class="control-group">
  <label for="ModelAbc" class="control-label">Abc</label>
  <div class="controls">
    <input name="data[Model][Abc]" class="" maxlength="250" type="text" id="ModelAbc">
  </div>
</div>
Run Code Online (Sandbox Code Playgroud)

如何让CakePHP产生这个输出?

dom*_*som 35

灵感来自lericson的答案,这是我对CakePHP 2.x的最终解决方案:

<?php echo $this->Form->create('ModelName', array(
    'class' => 'form-horizontal',
    'inputDefaults' => array(
        'format' => array('before', 'label', 'between', 'input', 'error', 'after'),
        'div' => array('class' => 'control-group'),
        'label' => array('class' => 'control-label'),
        'between' => '<div class="controls">',
        'after' => '</div>',
        'error' => array('attributes' => array('wrap' => 'span', 'class' => 'help-inline')),
    )));?>
<fieldset>
<?php echo $this->Form->input('Fieldname', array(
    'label' => array('class' => 'control-label'), // the preset in Form->create() doesn't work for me
    )); ?>
</fieldset>
<?php echo $this->Form->end();?>
Run Code Online (Sandbox Code Playgroud)

哪个产生:

<form...>
<fieldset>
<div class="control-group required error">
    <label for="Fieldname" class="control-label">Fieldname</label>
    <div class="controls">
        <input name="data[Fieldname]" class="form-error" maxlength="255" type="text" value="" id="Fieldname"/>
        <span class="help-inline">Error message</span>
    </div>
</div>
</fieldset>
</form>
Run Code Online (Sandbox Code Playgroud)

我基本上添加了'format'和'error'键,并将control-label类添加到label元素中.


小智 18

这是Bootstrap 3的解决方案

<?php echo $this->Form->create('User', array(
'class' => 'form-horizontal', 
'role' => 'form',
'inputDefaults' => array(
    'format' => array('before', 'label', 'between', 'input', 'error', 'after'),
    'div' => array('class' => 'form-group'),
    'class' => array('form-control'),
    'label' => array('class' => 'col-lg-2 control-label'),
    'between' => '<div class="col-lg-3">',
    'after' => '</div>',
    'error' => array('attributes' => array('wrap' => 'span', 'class' => 'help-inline')),
))); ?>
<fieldset>
    <legend><?php echo __('Username and password'); ?></legend>
    <?php echo $this->Form->input('username'); ?>
    <?php echo $this->Form->input('password'); ?>
</fieldset>
<?php echo $this->Form->end(__('Login')); ?>
Run Code Online (Sandbox Code Playgroud)

如果字段需要自己的标签:

<?php echo $this->Form->input('username', array('label' => array('text' => 'Your username', 'class' => 'col-lg-2 control-label'))); ?>
Run Code Online (Sandbox Code Playgroud)


ler*_*son 11

这是一种方式:

<?php echo $this->Form->create(null, array(
    'inputDefaults' => array(
        'div' => array('class' => 'control-group'),
        'label' => array('class' => 'control-label'),
        'between' => '<div class="controls">',
        'after' => '</div>',
        'class' => '')
)); ?>
Run Code Online (Sandbox Code Playgroud)