在站点级别定义cakephp inputDefaults的方法

在站点级别定义cakephp inputDefaults的方法,php,cakephp,cakephp-2.0,Php,Cakephp,Cakephp 2.0,是否有一种方法可以在站点级别定义选项['inputDefaults'],而不是在每个表单上定义TLDR: 将下面的2段代码粘贴到它们各自的位置,然后将$defaultOptions数组更改为您想要的-瞧。除了将默认值添加到表单->创建的输入默认值之外,它不会改变FormHelper的任何函数 说明和代码: 您可以通过创建自己的自定义MyFormHelper,来扩展FormHelper(比听起来更简单): <?php //create this file called 'MyFormHelp

是否有一种方法可以在站点级别定义
选项['inputDefaults']
,而不是在每个表单上定义TLDR:

将下面的2段代码粘贴到它们各自的位置,然后将
$defaultOptions
数组更改为您想要的-瞧。除了将默认值添加到
表单->创建
输入默认值
之外,它不会改变FormHelper的任何函数

说明和代码:

您可以通过创建自己的自定义
MyFormHelper
,来扩展FormHelper(比听起来更简单):

<?php
//create this file called 'MyFormHelper.php' in your View/Helper folder
App::uses('FormHelper', 'View/Helper');
class MyFormHelper extends FormHelper {

    public function create($model = null, $options = array()) {
        $defaultOptions = array(
            'inputDefaults' => array(
                'div' => false,
                'label' => false
            )
        );      

        if(!empty($options['inputDefaults'])) {
            $options = array_merge($defaultOptions['inputDefaults'], $options['inputDefaults']);
        } else {
            $options = array_merge($defaultOptions, $options);
        }
        return parent::create($model, $options);
    }
}

这使得无论何时调用
$This->Form
,它实际上都会调用您的自定义“MyFormHelper”-它所做的唯一一件事就是设置
输入默认值
,如果它们没有指定,那么继续执行Cake的FormHelper中的正常逻辑。

这真是太棒了-我做了一些更改,因此,您可以使用Hash::merge,而不是array merge来将其保存到Cake Api中。此外,我还将我的命名为“AppFormHelper”-但这只是我自己的命名:命名帮助程序非常松散。谢谢你的提示

哈希类:


我可以补充一下,上面Dave的代码有一个bug。该行:

$options = array_merge($defaultOptions['inputDefaults'], $options['inputDefaults']);
当在扩展FormHelper和表单本身中都指定inputDefaults时,导致“注意(8):数组到字符串转换[CORE/Cake/View/Helper.php,第486行]”


kirikintha的版本中不存在此缺陷。

+1-一直在考虑这样做,但从未考虑过如何做。
<?php
/**
 * @file AppFormHelper.
 *  This allows you to create defaults for your forms.
 */
App::uses('FormHelper', 'View/Helper');

class AppFormHelper extends FormHelper {

  public function create($model = null, $options = array()) {
    $default = array(
      'inputDefaults' => array(
        'div' => false,
        'class' => 'form-control',
        'autocomplete' => 'off',
      ),
    );
    $options = Hash::merge($default, $options);
    return parent::create($model, $options);
  }

}
$options = array_merge($defaultOptions['inputDefaults'], $options['inputDefaults']);