CakePHP:访问表单助手的“当前”模型,提供给$ form-> create()

时间:2011-01-07 00:21:09

标签: php cakephp-1.3

在我的CakePHP 1.3应用程序中,我需要一个表单控件:

  1. 由多个表单元素组成,
  2. 可以多种形式重复使用。如果可以的话,我想避免代码重复。
  3. 所以,我正在创建一个输出我的表单控件的元素,并且在使用编辑操作的值填充控件时遇到了障碍。现在,当您使用默认字段类型时,CakePHP会为您执行此操作,但我需要从$this->data中获取信息并在此情况下自行完成。

    问题是$this->data看起来像这样:

    array(
        'Model' => array( /* fields from Model */ ),
        'AnotherModel' => array( /* fields from AnotherModel */ )
    );
    

    在我的可重用元素中,我不知道我的字段属于哪个模型。但是,当我打电话给$form->create()时(在包含我正在写的元素的视图中),我告诉了Form Helper这个信息,所以它似乎应该能够告诉我。实际上,API documentation for the FormHelper class告诉了defaultModel属性,但遗憾的是,这个属性是空的。

    现在,简单的解决方案是将模型作为参数传递。我能做到。但是,我想尽可能避免参数膨胀,看起来这应该是可能的,但我无法弄清楚如何。有办法吗?

    谢谢!

2 个答案:

答案 0 :(得分:1)

现在我觉得有点羞怯。我应该在发布之前检查超类。 FormHelper继承自从Helper继承的AppHelper,而Helper有一个model()方法可以实现这一目的。

经验教训。 :)

答案 1 :(得分:0)

回避问题,但另一种方法是继承FormHelper并添加自定义方法来创建控件:

App::import('Helper', 'Form');

class CustomFormHelper extends FormHelper {
    public function customControl() {
        $control = $this->input(…);
        $control.= $this->checkbox(…);
        return $control;
    }
}