*/ class FormRenderer { /** * * @var FormRenderer */ private static $renderer = null; private static $registered = false; private function __construct() { } /** * * @return FormRenderer */ public static function instance() { if (is_null(self::$renderer)) { self::$renderer = new FormRenderer(); } return self::$renderer; } public static function register() { if (self::$registered) { return; } self::$registered = true; Blade::directive('form_begin', function ($expression) { return 'beginForm(' . $expression . '); ?>'; }); Blade::directive('form_end', function ($expression) { return 'endForm(' . $expression . '); ?>'; }); Blade::directive('form_label', function ($expression) { return 'renderLabel(' . $expression . '); ?>'; }); Blade::directive('form_field', function ($expression) { return 'renderField(' . $expression . '); ?>'; }); Blade::directive('form_error', function ($expression) { return 'renderError(' . $expression . '); ?>'; }); } public function beginForm(Form $form) { return 'encodeHtmlAttributes($form->getAssociativeAttributes()) . ">\n"; } public function renderLabel(AbstractField $field, $suffix = ':') { return 'encodeHtmlAttributes($field->label()->getAssociativeAttributes()) . '>' . e($field->label()->text()) . $suffix . ''; } public function renderField(AbstractField $field) { return view('accessories.forms.' . $field->type(), [ 'renderer' => $this, 'field' => $field, ]); } public function renderError(AbstractField $field, $template = '') { if (!$field->hasErrors()) { return ''; } if (is_string($template) && !empty($template)) { $correctTemplate = $template; } else { $correctTemplate = 'error'; } return view('accessories.forms.' . $correctTemplate, [ 'renderer' => $this, 'field' => $field, ]); } public function endForm() { return "\n"; } public function encodeHtmlAttributes(array $attributes) { $html = ''; foreach ($attributes as $name => $value) { $html .= ' ' . e($name); if (!is_null($value)) { $html .= '="' . e($value) . '"'; } } return $html; } }