SiZE
Новичок
Вопрос связан с предыдущей моей темой. Заполняется массив мета данных формы:
Метод getTemplate возвращает массив, который является шаблоном для сущности которую описывает класс:
Иногда необходимо бывает обернуть шаблон:
Как это лучше реализовать? Самое простое конечно, но не удобно использовать и наследовать:
Может сделать извращенный паттерн декоратор?
PHP:
$form = array(
/*
array(
'xtype' => 'textfield',
'name' => 'lastname',
'fieldlabel' => 'Фамилия'
)
*/
Field::init('lastname')->getTemplate(),
/*
array(
'xtype' => 'textfield',
'name' => 'firstname',
'fieldlabel' => 'Имя'
)
*/
Field::init('firstname')->getTemplate(),
/*
array(
'xtype' => 'textfield',
'name' => 'surname',
'fieldlabel' => 'Отчество'
)
*/
Field::init('surname')->getTemplate(),
);
Метод getTemplate возвращает массив, который является шаблоном для сущности которую описывает класс:
PHP:
public $template = array(
'xtype' => 'textfield',
'name' => 'lastname',
'fieldlabel' => 'Фамилия'
);
Иногда необходимо бывает обернуть шаблон:
PHP:
public $template = array(
'xtype' => 'fieldset',
'autoHeight' => true,
'items' => array(
array(
'xtype' => 'textfield',
'name' => 'lastname',
'fieldlabel' => 'Фамилия'
)
)
);
PHP:
array(
array(
'xtype' => 'fieldset',
'autoHeight' => true,
'items' => array(
Field::init('lastname')->getTemplate(),
)
),
Field::init('firstname')->getTemplate(),
Field::init('surname')->getTemplate(),
);
PHP:
$form = array(
// Передача
Field::init('lastname')->applyDecorators('fieldset'=>array('autoHeight' => true))->getTemplate(),
Field::init('firstname')->getTemplate(),
Field::init('surname')->getTemplate(),);
class Field {
public function applyDecorators($decorators){
$field = $this;
foreach ($decorators as $decorator => $params) {
// В этом месте декоратор получает объект поля и делает с ним что хочет, возвращая измененный объект поля :)
$field = new $decorator($field, $params);
}
return $field;
}
}