在CakePHP中,是否可以设置全局传递给Form helper create方法的选项?

时间:2012-02-22 17:43:23

标签: php cakephp

在CakePHP中,是否可以设置全局传递给Form helper create方法的选项?

由于我希望在我的所有表单上使用特定的表单布局,因此当我创建每个表单时,我当前必须这样做。

<?php 
echo $this->Form->create('User', array(
    'class' => 'form-horizontal', 
    'inputDefaults' => array(
        'format' => array('before', 'label', 'between', 'input', 'error', 'after'), 
        'between' => '<div class="controls">', 
        'after' => '</div>', 
        'div' => 'control-group', 
        'error' => array(
            'attributes' => array('wrap' => 'span', 'class' => 'help-inline')
            )
        )
    ));
?> 

我想知道是否有一种方法可以全局指定,所以我不需要每次创建调用都这样做。

2 个答案:

答案 0 :(得分:6)

在某处进行配置(例如:app/config/core.php - 或者如果扩展了配置系统,则包含类似的文件)

// [...the rest of the config is above...]
Configure::write('MyGlobalFormOptions', array(
'class' => 'form-horizontal', 
'inputDefaults' => array(
    'format' => array('before', 'label', 'between', 'input', 'error', 'after'), 
    'between' => '<div class="controls">', 
    'after' => '</div>', 
    'div' => 'control-group', 
    'error' => array(
        'attributes' => array('wrap' => 'span', 'class' => 'help-inline')
        )
    )
));

使用它看起来像这样......

<?php
echo $this->Form->create('User', Configure::read('MyGlobalFormOptions'));
?>

如果你需要更具体的某些特殊形式......

<?php
$more_options = array('class'=>'form-vertical');
$options = array_merge(Configure::read('MyGlobalFormOptions'), $more_options);
echo $this->Form->create('Profile', $options);
?>

答案 1 :(得分:2)

starlocke的答案还可以,但我甚至不想在这个地方写下这三行。 :)我认为这不是真正的“配置数据”。所以这就是我要做的事情:

MyFormHelper extends FormHelper {
    public function create($model, $options) {
        $defaults = array(/* YOUR DEFAULT OPTIONS*/);
        $options = Set::merge($defaults, $options);
        //...
    }
}

然后简单地称之为:

$这 - &GT; MyForm-&GT;创建( '个人资料');

或者在第二个参数中使用一个选项来调用它,你想要在某个地方进行更改。