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

时间:2012-09-02 10:42:36

标签: php cakephp cakephp-2.0

有没有办法在网站级别定义options['inputDefaults']而不是在每种形式

3 个答案:

答案 0 :(得分:11)

<强> TLDR:

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

解释&amp;代码:

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

MyFormHelper

然后,在AppController中,按以下方式包含Form帮助器(如果您已经有$ helpers变量,只需向其添加<?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); } } ):

'Form' => ...

这样,无论何时拨打public $helpers = array( 'Form' => array( 'className' => 'MyForm' ) ); ,它实际上都会调用您的自定义“MyFormHelper” - 它唯一能做的就是设置$this->Form如果未指定,则继续执行执行Cake的FormHelper中的常规逻辑。

答案 1 :(得分: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);
  }

}

答案 2 :(得分:0)

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

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

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

kirikintha的版本中没有此错误。