【发布时间】: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);
}
【问题讨论】:
-
这就是扩展的工作方式。应该做的伎俩。另请参阅 github.com/FriendsOfCake/bootstrap-ui 和其他很棒的插件,了解他们是如何做到的。
标签: cakephp model-view-controller cakephp-3.0