我需要在我的 Zend Framework 应用程序中创建一些自定义表单元素(使用自定义视图助手)。问题是它们都非常相似。我想创建一个基本视图助手类,每个都可以扩展,并实现我需要的抽象函数。
解决方案:
因此,如果我的Picker
元素是抽象类并且ContactPicker
是OrganizationPicker
扩展类......
表单元素:
class My_Form_Element_ContactPicker extends My_Form_Element_Picker
{
/**
* Default form view helper to use for rendering
* @var string
*/
public $helper = "contactPickerElement";
}
视图助手:
class My_View_Helper_ContactPickerElement extends My_View_Helper_PickerElement
{
public function contactPickerElement($name, $value = null, $attribs = null)
{
// I don't need to do anything in this function.
// I only need the parent to do all the work.
return parent::pickerElement($name, $value, $attribs);
}
protected function myAbstractFunctionThatMustBeImplemented()
{
// This function will do all the work specific to this extending class.
$model = new ContactModel();
return $model->foobar;
}
}
这是抽象视图助手:
abstract class Evanta_View_Helper_PickerElement extends Zend_View_Helper_FormElement
{
/**
* This function would have been called automatically, but since it's being extended...
* Any extending classes must remember to manually call this function
*/
public function modalPickerElement($name, $value = null, $attribs = null)
{
$html = 'My picker element HTML';
return $html;
}
/**
* This function must be implemented by any extending classes
*/
abstract protected function myAbstractFunctionThatMustBeImplemented();
}