Хорошая практика для создания декораторов форм phalcon 2.0?

Для создания декораторов форм (для рендеринга представлений) я создал абстрактный класс Базовая форма следующее:

abstract class BaseForm extends Form {

/**
* Render form field
* @param $name
* @param array $attr
* @return string
*/
public function renderDecorated($name, $attr = [])
{
$e = $this->get($name);
return '<li '.($this->hasErrors($e)?'class="error"':'').'>'.$this->renderItem($e, $attr).'</li>';
}

/**
* Render form field with errors displayed
* @param $name
* @param array $attr
* @return string
*/
public function renderDecoratedErrors($name, $attr = [])
{
$e = $this->get($name);
return '<li '.($this->hasErrors($e)?'class="error"':'').'>'.$this->renderErrors($e).$this->renderItem($e, $attr).'</li>';
}

/**
* Render classic form field
* @param $e
* @param array $attr
* @return string
*/
public function renderItem($e, $attr = []){
return '<label for="'.$e->getName().'">'.$e->getLabel().'</label>'.$e->render($attr);
}

/**
* Render errors
* @param $e
* @return string
*/
public function renderFieldErrors($e){
$m = $this->getMessagesFor($e->getName());
if (count($m)) {
$r = '<ul class="err_msg">';
foreach ($m as $i) {
$r .= '<li>'.$this->flash->error($i).'</li>';
}
return $r.'</ul>';
}
}

/**
* Check if specific field by $e has assigned errors
* @param $e
* @return bool
*/
public function hasErrors($e){
$m = $this->getMessagesFor($e->getName());
if (count($m))
return true;
return false;
}

/**
* Decorator for form errors
* @return null|string
*/
public function renderErrorsDecorated(){
if(count($this->getMessages())){
$r = '<div class="alert alert-danger"><a href="#" class="close" data-dismiss="alert" aria-label="close">&times;</a>';
foreach ($this->getMessages() as $key => $message) {
$r .= $message. '<br />';
}
return $r.'</div>';
}
return null;
}

}

Все мои формы должны расширяться Базовая форма учебный класс. Все Базовая форма методы обычно вызываются только в представлениях.

Пример использования можно найти здесь: https://github.com/mpetcu/report-manager/tree/master/app/forms

Есть ли другой способ сделать это? Я не думаю, что использование логики представления (HTML) в классах форм — это правильный путь?

2

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector