3

我正在使用 CakePHP (2.x) 开发一个应用程序,并且每当我创建表单时我都会重用一些设置,所以我决定扩展默认的 FormHelper 类,如果没有其他任何东西传入它,它将自动加载默认值(见下面的代码)。

<?php

class AppFormHelper extends FormHelper
{
    public function input($fieldName, $options = array())
    {
        $defaults = array(
            'class' =>  'input',
            'div'   =>  array(
                            'class' => 'button-height block-label margin-bottom'
                        )
        );

        $options = Set::merge($defaults, $options);

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

乍一看,在我看来像这样调用它时,这似乎工作得很好$this->AppForm->input('test');。但是,当提交该表单并出现错误时,该错误不会显示在屏幕上。调用时$this->Form->input('test')出现错误,会创建一个如下所示的 div:

<div class="error-message">This form had an error</div>

最终,我只想有一个简单的方法来复制 FormHelper 的输入选项,并认为这是正确的方法,但由于它会产生问题,我不再确定。任何人都知道如何让错误再次出现,或者有更好的解决方案来为 FormHelper 提供默认选项。

谢谢!

4

3 回答 3

4

好吧,由于我的评论解决了您的问题,因此我冒昧地将其写为答案... ;-) 顺便说一句,我很高兴能为您提供帮助!

对我来说,这似乎是一个非常合乎逻辑的方法。

不确定这是否是问题所在,但您是否将 AppFormHelper 用于整个表单?我经常使用自己继承自 FormHelper 的自定义助手,将核心助手与我的混合会带来一些问题,例如如果您使用 SecurityComponent。

也许这里正在发生类似的事情?

于 2012-06-01T21:05:30.347 回答
2

要覆盖 Cake 2.0 中的 HtmlHelper 方法,您可以简单地:

创建您的 OwnHelper 类,其中包含例如扩展 HtmlHelper 的链接方法,在 AppController 中指定:

$helpers = array('Html' => array('className' => 'OwnHelper'));

通过 ADmad

于 2012-10-26T11:59:13.580 回答
0

正如 nIcO 向我指出的那样,这是一个很好的解决方案,但是我没有将 AppFormHelper 用于整个表单。所以这很好用,但请确保您使用的自定义类用于整个表单。

于 2012-06-01T18:26:39.423 回答