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


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


3571
2017-09-02 10:42


起源

+1 - 总是考虑这样做,但从来没有考虑如何。 - Dave


答案:


TLDR:

将下面的2块代码粘贴到各自的位置,然后更改 $defaultOptions 阵列到你想要的任何东西 - 瞧。它不会改变任何FormHelper的功能,除了添加默认值 Form->createinputDefaults

解释和代码:

您可以通过自定义扩展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中的常规逻辑。


11
2017-09-02 16:02





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

}

0
2017-12-13 03:59





我可以补充说,上面的Dave代码中有一个错误。这条线:

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

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

kirikintha的版本中没有此错误。


0
2017-10-27 05:02