0

我正在尝试修改 FormHelper 的行为以满足我的应用程序要求。我想使用本机 FormHelper,但对于所有输入,我需要添加一些短消息,为用户提供帮助并描述特定字段。

我的想法是创建自己的助手并将帮助消息作为参数传递。此函数将修改表单的 inputDefaults 设置并调用本机 FormHelper 输入函数。

例如:

class MsgFormHelper extends AppHelper {
      public function input($name, $message, $options) {
        $this->_View->Form->_inputDefaults['after'] .= '<div>'.$message.'</div>';
        return $this->_View->Form->input($name, $options);
    }
}

但是这个解决方案注意到这个错误:

注意(8):间接修改重载属性FormHelper::$_inputDefaults没有效果...

有什么方法可以修改表单的 inputDefaults 设置中的“之后”值吗?

4

2 回答 2

0

我可能找到了一个解决方案(它有效,但我不确定它是否违反了一些 CakePHP 的原则)。感谢您的意见。

class MsgFormHelper extends AppHelper {

    public function __construct(View $view, $settings = array()) {
        parent::__construct($view, $settings);
    }

    public function input($name, $message, $options) {

        $add_message = true;

        if (isset($options['after'])) {
            $options['after'] = trim($options['after']);
            $add_message = empty($options['after']);
        }

        if ($add_message) {
            $options['after'] = '<div class="input-help">' . $message . '</div>' . $this->_View->Form->_inputDefaults['after'];
        }

        return $this->_View->Form->input($name, $options);
    }

}
于 2013-01-30T10:05:19.107 回答
0

您应该扩展FormHelper本身 not AppHelper。然后在您的控制器中使用别名功能,以便您仍然$this->Form->input()在您的视图中使用,但它实际上会引用您的自定义助手。

public $helpers = array('Form' => array('className' => 'MsgForm'))

于 2013-01-30T16:15:06.857 回答