在站点级别定义cakehp-inputDefaults的方法


Way to define cakephp inputDefaults at site level

有没有一种方法可以在站点级别定义options['inputDefaults'],而不是在每个表单

TLDR:

将下面的两块代码粘贴到它们各自的位置,然后将$defaultOptions数组更改为您想要的任何内容—瞧。除了为Form->createinputDefaults添加默认值之外,它不会更改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);
    }
}

然后,在您的AppController中,以以下方式包含Form helper(如果您已经有$helpers变量,只需向其中添加'Form' => ...):

public $helpers = array(
    'Form' => array(
        'className' => 'MyForm'
    )
);

这使得每当您调用$this->Form时,它实际上都会调用您的自定义"MyFormHelper"——它所做的唯一事情就是设置inputDefaults(如果没有指定),然后继续执行Cake的FormHelper中的正常逻辑。

这真的很好-我确实做了一些更改,所以你可以使用Hash::merge,而不是数组merge来将其保留在Cake Api中。此外,我将我的助手命名为"AppFormHelper",但这只是我自己的命名:命名助手非常松散。谢谢你的小费!

哈希类:http://book.cakephp.org/2.0/en/core-utility-libraries/hash.html

<?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);
  }
}

我能补充一下Dave上面的代码中有一个错误吗

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

当在扩展的FormHelper和表单本身中都指定了inputDefaults时,会导致"Notice(8):Array to string conversion[CORE/Cake/View/Helper.php,line 486]"。

kirikintha的版本中不存在此错误。