我决定改变我的方法,让管理所有表单的类接受表单字符串而不是表单。
static public function registerForm($formClassName, $formName) {
self::$_forms[$formName] = $formClassName;
}
然后我创建了函数来从类中获取表单或所有表单,如下所示
public function getForm($name) {
if(empty(self::$_forms[$name])) {
throw new Core_Form_Store_Exception;
}
// If the for is instanciated we return it
else if(self::$_forms[$name] instanceof Zend_Form) {
return self::$_forms[$name];
}
else {
// Instanciate the class and return it
$form = new self::$_forms[$name];
self::$_forms[$name] = $form;
return $form;
}
}
getForms()只要求getForm()每个可用的表格。当涉及到函数的名称和传递的顺序参数时,我有点厌倦了模仿普通 Zend_Form 的接口。现在我让它工作了,作为奖励,我实际上并没有实例化任何形式,直到我需要它。如果我只从 store 类中请求一个特定的表单,那么只有该表单被实例化并保存以供将来访问。