Benim Zend Framework uygulamasında (özel görünüm yardımcıları ile) bir kaç özel form öğeleri oluşturmak gerekir. Sorun her çok benzer olmasıdır. Ben bu her uzatabilirsiniz bir baz görünüm yardımcı sınıf oluşturmak istiyorum ve ben gerektiren soyut bir işlevi uygulanır.
Solution:
Yani benim Picker
eleman soyut sınıf ve ContactPicker
ve OrganizationPicker
uzanan sınıflar olsaydı ...
Form elemanı:
class My_Form_Element_ContactPicker extends My_Form_Element_Picker
{
/**
* Default form view helper to use for rendering
* @var string
*/
public $helper = "contactPickerElement";
}
View helper:
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;
}
}
Ve burada soyut görünümü yardımcı bulunuyor:
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();
}