【问题标题】:CakePhp 3 - How to extend an helperCakePhp 3 - 如何扩展一个助手
【发布时间】:2019-08-30 16:39:36
【问题描述】:

在 CakePhp 2.x 中,我能够用我自己的类扩展一个核心助手并在视图文件中使用它。

在 CakePhp 3.8 中,我想扩展 FormHelper,例如更改一些默认属性。 我试过这个:

class MyFormHelper extends FormHelper
{
  public function control($fieldName, array $options = [])
  {
    $options += [
          'label' => false,
          'class' => 'form-control'
    ];

    return parent::control($fieldName, $options);
  }
}

并且我的选择正确,但许多其他原始行为不再起作用。 例如,CakePhp 不能识别字段类型(布尔类型字段显示为文本输入,而不是复选框),并且不会在编辑表单中插入字段的值。

你知道为什么吗?

我也试过以这种方式调用父方法,但没有成功:

[...]
// return parent::control($fieldName, $options);
return $this->__xformCallParent(array($this, 'parent::control'), func_get_args());
[...]
private function __xformCallParent($call, $args)
{
    if (PHP_VERSION >= 5.3 && is_array($call)) {
        $call = $call[1];
    }
    return call_user_func_array($call, $args);
}

【问题讨论】:

标签: cakephp model-view-controller cakephp-3.0


【解决方案1】:

我找到了答案! 只需在 src/View/Helper/FormHelper.php 文件中插入您的自定义 FormHelper 并使用以下代码声明它:

namespace App\View\Helper;
use Cake\View\Helper\FormHelper as Helper;

class FormHelper extends Helper
{
    public function control($fieldName, array $options = [])
    {
        $options += [
            'label' => false,
            'class' => 'form-control'
        ];

        [...]

        return parent::control($fieldName, $options);
    }
}

在方法中替换您的代码。 我刚刚默认删除了标签,并为输入元素添加了一个自定义类。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-24
    • 2014-11-24
    相关资源
    最近更新 更多