11

有没有办法options['inputDefaults']在站点级别定义而不是在每个表单中定义

4

3 回答 3

11

TLDR:

将下面的 2 块代码粘贴到各自的位置,然后将$defaultOptions数组更改为您想要的任何内容 - 瞧。它不会改变 FormHelper 的任何功能,除了将默认值添加到Form->create'sinputDefaults中。

说明&代码:

您可以通过自定义来扩展 FormHelper(比听起来容易)MyFormHelper

<?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 帮助程序(如果您已经有一个 $helpers 变量,只需添加'Form' => ...它):

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

这使得每当您调用时$this->Form,它实际上都会调用您的自定义“MyFormHelper”——它唯一要做的就是设置inputDefaults它们是否未指定,然后继续执行在 Cake 的 FormHelper 中找到的正常逻辑。

于 2012-09-02T16:02:13.947 回答
0

这真的很棒——我确实改变了一点,所以你使用 Hash::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);
  }

}
于 2013-12-13T03:59:53.190 回答
0

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

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

当在扩展的 FormHelper 以及表单本身中都指定了 inputDefaults 时,会导致“注意 (8):数组到字符串的转换 [CORE/Cake/View/Helper.php,第 486 行]”。

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

于 2014-10-27T05:02:17.523 回答