This commit is contained in:
2024-07-25 12:33:47 +03:00
commit 3675ad134c
38 changed files with 1928 additions and 0 deletions

109
src/ActiveForm.php Executable file
View File

@ -0,0 +1,109 @@
<?php
namespace itguild\forms;
use itguild\forms\builders\ButtonBuilder;
use itguild\forms\builders\CheckBoxBuilder;
use itguild\forms\builders\HiddenBuilder;
use itguild\forms\builders\RadioButtonBuilder;
use itguild\forms\builders\SelectBuilder;
use itguild\forms\builders\TextAreaBuilder;
use itguild\forms\builders\TextInputBuilder;
use itguild\forms\debug\Debug;
use itguild\forms\inputs\BaseInput;
use itguild\forms\inputs\Button;
use itguild\forms\inputs\Checkbox;
use itguild\forms\inputs\Hidden;
use itguild\forms\inputs\RadioButton;
use itguild\forms\inputs\Select;
use itguild\forms\inputs\TextArea;
use itguild\forms\inputs\TextInput;
use itguild\forms\templates\Template;
class ActiveForm
{
private BaseInput $fieldObject;
/**
* @param string $action
* @return void
*/
public function beginForm(string $action): void
{
echo "<form method='POST' action='$action'>";
}
/**
* @return void
*/
public function endForm(): void
{
echo "</form>";
}
public function field($class, string $name, array $params = [])
{
if ($class === Select::class){
$this->fieldObject = SelectBuilder::build($name, $params);
}
elseif ($class === TextInput::class){
$this->fieldObject = TextInputBuilder::build($name, $params);
}
elseif ($class === TextArea::class){
$this->fieldObject = TextAreaBuilder::build($name, $params);
}
elseif ($class === Checkbox::class) {
$this->fieldObject = CheckBoxBuilder::build($name, $params);
}
elseif ($class === Button::class) {
$this->fieldObject = ButtonBuilder::build($name, $params);
}
elseif ($class === RadioButton::class){
$this->fieldObject = RadioButtonBuilder::build($name, $params);
}
elseif ($class === Hidden::class){
$this->fieldObject = HiddenBuilder::build($name, $params);
}
else {
$this->fieldObject = new $class($name, $params);
}
return $this;
}
public function setLabel(string $title): self
{
$this->fieldObject->setLabel($title);
return $this;
}
public function setOptions(array $options): self
{
$this->fieldObject->setOptions($options);
return $this;
}
public function setTemplate($template): self
{
$this->fieldObject->setTemplate($template);
return $this;
}
public function render()
{
$this->fieldObject->create();
$this->fieldObject->render();
}
public function fetch()
{
$this->fieldObject->create();
return $this->fieldObject->fetch();
}
}

110
src/Form.php Executable file
View File

@ -0,0 +1,110 @@
<?php
namespace itguild\forms;
use itguild\forms\inputs\Checkbox;
use itguild\forms\inputs\Select;
use itguild\forms\inputs\TextInput;
use itguild\forms\inputs\Label;
use itguild\forms\inputs\RadioButton;
use itguild\forms\inputs\TextArea;
use itguild\forms\inputs\Button;
class Form {
/**
* @param string $action
* @return void
*/
public function beginForm(string $action): void
{
echo "<form method='POST' action='$action'>";
}
/**
* @param string $name
* @param array $paramsArray
* @return void
*/
public function textInput(string $name, array $paramsArray = []): void
{
TextInput::build($name, $paramsArray);
}
/**
* @param string $name
* @param string $value
* @param array $paramsArray
* @return void
*/
public function checkBox(string $name, string $value, array $paramsArray = []): void
{
Checkbox::build($name, $value, $paramsArray);
}
/**
* @param string $title
* @param array $paramsArray
* @return void
*/
public function label(string $title, array $paramsArray = []): void
{
Label::build($title, $paramsArray);
}
/**
* @param string $name
* @param array $paramsArray
* @return void
*/
public function radio(string $name, array $paramsArray = []): void
{
RadioButton::build($name, $paramsArray);
}
/**
* @param string $name
* @param string $value
* @param array $paramsArray
* @return void
*/
public function textarea(string $name, string $value = "", array $paramsArray = []): void
{
TextArea::build($name, $value, $paramsArray);
}
/**
* @param string $name
* @param array $options
* @param $value
* @param array $paramsArray
* @return void
*/
public function select(string $name, array $options = [], $value = null, array $paramsArray = []): void
{
Select::build($name, $options, $value, $paramsArray);
}
/**
* @param string $name
* @param string $value
* @param array $paramsArray
* @return void
*/
public function button(string $name, string $value, array $paramsArray = []): void
{
Button::build($name, $value, $paramsArray);
}
/**
* @return void
*/
public function endForm(): void
{
echo "</form>";
}
}

89
src/JsonForm.php Executable file
View File

@ -0,0 +1,89 @@
<?php
namespace itguild\forms;
use itguild\forms\builders\Builder;
use itguild\forms\builders\LabelBuilder;
use itguild\forms\debug\Debug;
use itguild\forms\mappers\JsonInputMapper;
use itguild\forms\inputs\BaseInput;
use itguild\forms\ActiveForm;
use itguild\forms\traits\CreateParams;
class JsonForm
{
use CreateParams;
private $jsonData;
private $html = '';
public function __construct($json)
{
$this->jsonData = json_decode($json, true);
}
public function beginForm($params = []): string
{
$paramsString = $this->createParams($params);
return "<form $paramsString >";
}
public function endForm(): string
{
return "</form>";
}
public function convertHTML(): void
{
$this->html .= $this->beginForm($this->jsonData['meta']);
foreach ($this->jsonData['data'] as $item) {
if (isset($item["type"]) and isset($item["name"])) {
/**
* @var $builder Builder
*/
$builder = JsonInputMapper::getBuilder($item["type"]);
unset($item["type"]);
$name = $item["name"];
unset($item["name"]);
$label = '';
if (isset($item['label'])) {
$label = $this->createLabel($item['label']);
}
unset($item['label']);
$input = $builder::build($name, $item);
$input->setLabel($label)->create();
$this->html .= $input->fetch();
}
}
$this->html .= $this->endForm();
//return $this->fetch($html);
}
private function createLabel($labelParams)
{
$title = '';
if(isset($labelParams['title'])){
$title = $labelParams['title'];
unset($labelParams['title']);
}
return LabelBuilder::build($title, $labelParams);
}
public function render(): void
{
echo $this->html;
}
public function fetch(): string
{
return $this->html;
}
}

12
src/builders/Builder.php Executable file
View File

@ -0,0 +1,12 @@
<?php
namespace itguild\forms\builders;
use itguild\forms\inputs\BaseInput;
interface Builder
{
public static function build(string $name, array $params = []): BaseInput;
}

18
src/builders/ButtonBuilder.php Executable file
View File

@ -0,0 +1,18 @@
<?php
namespace itguild\forms\builders;
use itguild\forms\inputs\Button;
class ButtonBuilder
{
public static function build(string $name, array $params = [])
{
$value = $params['value'] ?? null;
$typeInput = $params['typeInput'] ?? null;
unset($params['value']);
unset($params['typeInput']);
return new Button(name: $name, value: $value, typeInput: $typeInput, paramsArray: $params);
}
}

View File

@ -0,0 +1,16 @@
<?php
namespace itguild\forms\builders;
use itguild\forms\inputs\Checkbox;
class CheckBoxBuilder
{
public static function build(string $name, array $params = []): Checkbox
{
$value = $params['value'] ?? "";
unset($params['value']);
return new Checkbox(name: $name, value: $value, paramsArray: $params);
}
}

View File

@ -0,0 +1,17 @@
<?php
namespace itguild\forms\builders;
use itguild\forms\inputs\Checkbox;
use itguild\forms\inputs\Hidden;
class HiddenBuilder
{
public static function build(string $name, array $params = []): Hidden
{
$value = $params['value'] ?? "";
unset($params['value']);
return new Hidden(name: $name, value: $value, paramsArray: $params);
}
}

14
src/builders/LabelBuilder.php Executable file
View File

@ -0,0 +1,14 @@
<?php
namespace itguild\forms\builders;
use itguild\forms\inputs\Label;
use itguild\forms\inputs\RadioButton;
class LabelBuilder
{
public static function build(string $title, array $params = [])
{
return new Label(title: $title, paramsArray: $params);
}
}

View File

@ -0,0 +1,14 @@
<?php
namespace itguild\forms\builders;
use itguild\forms\inputs\RadioButton;
class RadioButtonBuilder
{
public static function build(string $name, array $params = [])
{
return new RadioButton(name: $name, paramsArray: $params);
}
}

21
src/builders/SelectBuilder.php Executable file
View File

@ -0,0 +1,21 @@
<?php
namespace itguild\forms\builders;
use itguild\forms\debug\Debug;
use itguild\forms\inputs\Select;
class SelectBuilder
{
public static function build(string $name, array $params = [])
{
$value = $params['value'] ?? null;
unset($params['value']);
$options = $params['options'] ?? [];
unset($params['options']);
return new Select(name: $name, options: $options, value: $value, paramsArray: $params);
}
}

View File

@ -0,0 +1,17 @@
<?php
namespace itguild\forms\builders;
use itguild\forms\inputs\TextArea;
class TextAreaBuilder
{
public static function build(string $name, array $params = [])
{
$value = $params['value'] ?? "";
unset($params['value']);
return new TextArea(name: $name, value: $value, paramsArray: $params);
}
}

View File

@ -0,0 +1,15 @@
<?php
namespace itguild\forms\builders;
use itguild\forms\inputs\BaseInput;
use itguild\forms\inputs\TextInput;
class TextInputBuilder implements Builder
{
public static function build(string $name, array $params = []): BaseInput
{
return new TextInput(name: $name, paramsArray: $params);
}
}

29
src/debug/Debug.php Executable file
View File

@ -0,0 +1,29 @@
<?php
namespace itguild\forms\debug;
class Debug
{
/**
* @param $content
* @return void
*/
public static function prn($content)
{
echo '<pre style="background: lightgray; border: 1px solid black; padding: 2px">';
print_r($content);
echo '</pre>';
}
/**
* @param $content
* @return void
*/
public static function dd($content)
{
echo '<pre style="background: lightgray; border: 1px solid black; padding: 2px">';
print_r($content);
echo '</pre>';
die();
}
}

View File

@ -0,0 +1,11 @@
<?php
namespace itguild\forms\exceptions;
class CreateFormException extends \Exception
{
function __construct(string $msg)
{
$this->message = "Create form error: " . $msg;
}
}

View File

@ -0,0 +1,13 @@
<?php
namespace itguild\forms\exceptions;
class FieldTypeNotFound extends \Exception
{
function __construct(string $type)
{
$this->message = "Тип поля $type не найден";
}
}

View File

@ -0,0 +1,11 @@
<?php
namespace itguild\forms\exceptions;
class FormNotFoundException extends \Exception
{
function __construct($formId)
{
$this -> message = "Форма $formId не найдена";
}
}

View File

@ -0,0 +1,11 @@
<?php
namespace itguild\forms\exceptions;
class FormResultNotFoundException extends \Exception
{
function __construct($id)
{
$this -> message = "Ответ формы $id не найдена";
}
}

View File

@ -0,0 +1,22 @@
<?php
namespace itguild\forms\helpers;
class TranslitorHelper
{
public static function translit($str){
$russian = array('А', 'Б', 'В', 'Г', 'Д', 'Е', 'Ё', 'Ж', 'З',
'И', 'Й', 'К', 'Л', 'М', 'Н', 'О', 'П', 'Р', 'С', 'Т', 'У',
'Ф', 'Х', 'Ц', 'Ч', 'Ш', 'Щ', 'Ъ', 'Ы', 'Ь', 'Э', 'Ю', 'Я',
'а', 'б', 'в', 'г', 'д', 'е', 'ё', 'ж', 'з', 'и', 'й', 'к',
'л', 'м', 'н', 'о', 'п', 'р', 'с', 'т', 'у', 'ф', 'х', 'ц',
'ч', 'ш', 'щ', 'ъ', 'ы', 'ь', 'э', 'ю', 'я', ' ');
$translit = array('A', 'B', 'V', 'G', 'D', 'E', 'E', 'Gh', 'Z',
'I', 'Y', 'K', 'L', 'M', 'N', 'O', 'P', 'R', 'S', 'T', 'U', 'F',
'H', 'C', 'Ch', 'Sh', 'Sch', 'Y', 'Y', 'Y', 'E', 'Yu', 'Ya', 'a',
'b', 'v', 'g', 'd', 'e', 'e', 'gh', 'z', 'i', 'y', 'k', 'l', 'm',
'n', 'o', 'p', 'r', 's', 't', 'u', 'f', 'h', 'c', 'ch', 'sh', 'sch',
'y', 'y', 'y', 'e', 'yu', 'ya', '_');
return str_replace($russian, $translit, $str);
}
}

66
src/inputs/BaseInput.php Executable file
View File

@ -0,0 +1,66 @@
<?php
namespace itguild\forms\inputs;
use itguild\forms\templates\Template;
abstract class BaseInput
{
protected Template $inputTemplate;
protected bool $hasLabel = false;
protected string $html = '';
protected string|Label $label = "";
protected string $labelString = "";
/**
* @return void
*/
public function render(): void
{
echo $this->html;
}
public function fetch(): string
{
return $this->html;
}
public abstract function create();
/**
* @param string|Label $title
* @return $this
*/
public function setLabel(string|Label $title): self
{
$this->hasLabel = true;
$this->label= $title;
return $this;
}
protected function createLabel()
{
if($this->hasLabel) {
if(is_string($this->label)){
$this->labelString = "<label>$this->label</label>";
}
else {
$this->labelString= $this->label->create()->fetch();
}
}
}
/**
* @param $template
* @return $this
*/
public function setTemplate($template): self
{
$this->inputTemplate = new $template();
return $this;
}
}

60
src/inputs/Button.php Executable file
View File

@ -0,0 +1,60 @@
<?php
namespace itguild\forms\inputs;
use itguild\forms\templates\Simple\SimpleTemplate;
use itguild\forms\traits\CreateParams;
use itguild\forms\inputs\BaseInput;
class Button extends BaseInput
{
use CreateParams;
private $typeInput;
private string $name;
private string $value;
private array $paramsArray;
/**
* @param string $name
* @param string $value
* @param array $paramsArray
*/
public function __construct(string $name, string $value, $typeInput, array $paramsArray = [])
{
$this->typeInput = $typeInput;
$this->name = $name;
$this->paramsArray = $paramsArray;
$this->value = $value;
$this->inputTemplate = new SimpleTemplate();
}
/**
* @return $this
*/
public function create(): self
{
$paramsString = $this->createParams($this->paramsArray);
$label = "";
$button = "<input type='$this->typeInput' value='$this->value' name='$this->name' $paramsString>";
$this->createLabel();
$this->html = str_replace('{input}', $button, $this->inputTemplate->getInputTemplate());
$this->html = str_replace('{label}', $this->labelString, $this->html);
return $this;
}
/**
* @param string $name
* @param string $value
* @param array $paramsArray
* @return void
*/
public static function build( string $name, string $value, string $typeInput, array $paramsArray = []): void
{
$button = new self($name, $value, $typeInput, $paramsArray);
$button->create()->render();
}
}

61
src/inputs/Checkbox.php Executable file
View File

@ -0,0 +1,61 @@
<?php
namespace itguild\forms\inputs;
use itguild\forms\templates\Simple\SimpleTemplate;
use itguild\forms\traits\CreateParams;
use itguild\forms\inputs\BaseInput;
class Checkbox extends BaseInput
{
use CreateParams;
private string $name;
private string $value;
private array $paramsArray;
/**
* @param string $name
* @param string $value
* @param array $paramsArray
*/
public function __construct(string $name, string $value = '', array $paramsArray = [])
{
$this->name = $name;
$this->value = $value;
$this->paramsArray = $paramsArray;
$this->inputTemplate = new SimpleTemplate();
}
/**
* @return $this
*/
public function create(): self
{
$paramsString = $this->createParams($this->paramsArray);
$checkBox = "<input name='$this->name' type='checkbox' value='$this->value' $paramsString >";
$label = "";
$this->createLabel();
$this->html = str_replace('{input}', $checkBox, $this->inputTemplate->getInputTemplate());
$this->html = str_replace('{label}', $this->labelString, $this->html);
return $this;
}
/**
* @param string $name
* @param string $value
* @param array $paramsArray
* @return void
*/
public static function build(string $name, string $value, array $paramsArray): void
{
$checkBox = new self($name, $value, $paramsArray);
$checkBox->create()->render();
}
}

60
src/inputs/Hidden.php Normal file
View File

@ -0,0 +1,60 @@
<?php
namespace itguild\forms\inputs;
use itguild\forms\templates\Simple\SimpleTemplate;
use itguild\forms\traits\CreateParams;
class Hidden extends BaseInput
{
use CreateParams;
private string $name;
private string $value;
private array $paramsArray;
/**
* @param string $name
* @param string $value
* @param array $paramsArray
*/
public function __construct(string $name, string $value = '', array $paramsArray = [])
{
$this->name = $name;
$this->value = $value;
$this->paramsArray = $paramsArray;
$this->inputTemplate = new SimpleTemplate();
}
/**
* @return $this
*/
public function create(): self
{
$paramsString = $this->createParams($this->paramsArray);
$hidden = "<input name='$this->name' type='hidden' value='$this->value' $paramsString >";
$label = "";
$this->createLabel();
$this->html = str_replace('{input}', $hidden, $this->inputTemplate->getInputTemplate());
$this->html = str_replace('{label}', $this->labelString, $this->html);
return $this;
}
/**
* @param string $name
* @param string $value
* @param array $paramsArray
* @return void
*/
public static function build(string $name, string $value, array $paramsArray): void
{
$hidden = new self($name, $value, $paramsArray);
$hidden->create()->render();
}
}

59
src/inputs/Label.php Executable file
View File

@ -0,0 +1,59 @@
<?php
namespace itguild\forms\inputs;
use itguild\forms\traits\CreateParams;
use itguild\forms\inputs\BaseInput;
class Label extends BaseInput
{
use CreateParams;
private string $title;
private array $paramsArray;
/**
* @param string $title
* @param array $paramsArray
*/
public function __construct(string $title, array $paramsArray = [])
{
$this->title = $title;
$this->paramsArray = $paramsArray;
}
/**
* @return $this
*/
public function create(): self
{
$paramsString = $this->createParams($this->paramsArray);
$this->html = "<label $paramsString >$this->title</label>";
return $this;
}
/**
* @return string
*/
public function getHtml(): string
{
return $this->html;
}
/**
* @param string $title
* @param array $paramsArray
* @return void
*/
public static function build(string $title, array $paramsArray = [])
{
$label = new self($title, $paramsArray);
$label->create()->render();
}
}

63
src/inputs/RadioButton.php Executable file
View File

@ -0,0 +1,63 @@
<?php
namespace itguild\forms\inputs;
use itguild\forms\templates\Simple\SimpleTemplate;
use itguild\forms\traits\CreateOption;
use itguild\forms\traits\CreateParams;
use itguild\forms\inputs\BaseInput;
class RadioButton extends BaseInput
{
use CreateParams;
use CreateOption;
private $name;
private $paramsArray;
private $options = [];
private $value;
public function __construct(string $name, array $paramsArray = [])
{
$this->name = $name;
$this->paramsArray = $paramsArray;
$this->inputTemplate = new SimpleTemplate();
}
/**
* @return $this
*/
public function create(): self
{
$paramsString = $this->createParams($this->paramsArray);
$optionsString = $this->createOption($this->options, $this->value);
$radioButton = "<input name='$this->name' type='radio' $paramsString>$optionsString";
$label = "";
$this->createLabel();
$this->html = str_replace('{input}', $radioButton, $this->inputTemplate->getInputTemplate());
$this->html = str_replace('{label}', $this->labelString, $this->html);
return $this;
}
/**
* @param string $name
* @param array $paramsArray
* @return void
*/
public static function build(string $name, array $paramsArray = []): void
{
$radioButton = new self($name, $paramsArray);
$radioButton->create()->render();
}
/**
* @param $options
* @return $this
*/
public function setOptions($options)
{
$this->options = array_merge($options, $this->options);
return $this;
}
}

84
src/inputs/Select.php Executable file
View File

@ -0,0 +1,84 @@
<?php
namespace itguild\forms\inputs;
use itguild\forms\debug\Debug;
use itguild\forms\templates\Template;
use itguild\forms\traits\CreateOption;
use itguild\forms\traits\CreateParams;
use itguild\forms\inputs\BaseInput;
use itguild\forms\templates\Simple\SimpleTemplate;
use itguild\forms\templates\bootstrap5\Bootstrap5Template;
class Select extends BaseInput
{
use CreateParams;
use CreateOption;
private $name;
private $options;
private $value;
private $paramsArray;
/**
* @param string $name
* @param array $options
* @param $value
* @param array $paramsArray
*/
public function __construct(string $name, array $options = [], $value = null, array $paramsArray = [])
{
$this->name = $name;
$this->options = $options;
$this->value = $value;
$this->paramsArray = $paramsArray;
$this->inputTemplate = new SimpleTemplate();
}
/**
* @return $this
*/
public function create(): self
{
$paramsString = $this->createParams($this->paramsArray);
$optionsString = $this->createOption($this->options, $this->value);
$label = "";
$select = "<select name='$this->name' $paramsString>$optionsString</select>";
$this->createLabel();
$this->html = str_replace('{input}', $select, $this->inputTemplate->getInputTemplate());
$this->html = str_replace('{label}', $this->labelString, $this->html);
return $this;
}
/**
* @param string $name
* @param array $options
* @param $value
* @param array $paramsArray
* @return void
*/
public static function build(string $name, array $options = [], $value = null, array $paramsArray = []): void
{
$select = new self($name, $options, $value, $paramsArray);
$select->create()->render();
}
/**
* @param $options
* @return $this
*/
public function setOptions($options)
{
$this->options = array_merge($options, $this->options);
return $this;
}
}

62
src/inputs/TextArea.php Executable file
View File

@ -0,0 +1,62 @@
<?php
namespace itguild\forms\inputs;
use itguild\forms\traits\CreateParams;
use itguild\forms\inputs\BaseInput;
use itguild\forms\templates\bootstrap5\Bootstrap5Template;
use itguild\forms\templates\Simple\SimpleTemplate;
use itguild\forms\templates\Template;
class TextArea extends BaseInput
{
use CreateParams;
private $name;
private $value;
private $paramsArray;
/**
* @param string $name
* @param string $value
* @param array $paramsArray
*/
public function __construct(string $name, string $value = '', array $paramsArray = [])
{
$this->name = $name;
$this->value = $value;
$this->paramsArray = $paramsArray;
$this->inputTemplate = new SimpleTemplate();
}
/**
* @return $this
*/
public function create(): self
{
$paramsString = $this->createParams($this->paramsArray);
$label = "";
$textarea = "<textarea name='$this->name' $paramsString>$this->value</textarea>";
$this->createLabel();
$this->html = str_replace('{input}', $textarea, $this->inputTemplate->getInputTemplate());
$this->html = str_replace('{label}', $this->labelString, $this->html);
return $this;
}
/**
* @param string $name
* @param string $value
* @param array $paramsArray
* @return void
*/
public static function build(string $name, string $value, array $paramsArray = []): void
{
$textarea = new self($name, $value, $paramsArray);
$textarea->create()->render();
}
}

62
src/inputs/TextInput.php Executable file
View File

@ -0,0 +1,62 @@
<?php
namespace itguild\forms\inputs;
use itguild\forms\debug\Debug;
use itguild\forms\inputs\BaseInput;
use itguild\forms\templates\bootstrap5\Bootstrap5Template;
use itguild\forms\templates\Simple\SimpleTemplate;
use itguild\forms\templates\Template;
use itguild\forms\traits\CreateParams;
class TextInput extends BaseInput
{
use CreateParams;
private string $name;
private array $paramsArray;
/**
* @param string $name
* @param array $paramsArray
*/
public function __construct(string $name, array $paramsArray = [])
{
$this->name = $name;
$this->paramsArray = $paramsArray;
$this->inputTemplate = new SimpleTemplate();
}
/**
* @return self
*/
public function create(): self
{
$paramsString = $this->createParams($this->paramsArray);
$label = "";
$input = "<input name='$this->name' $paramsString >";
$this->createLabel();
$this->html = str_replace('{input}', $input, $this->inputTemplate->getInputTemplate());
$this->html = str_replace('{label}', $this->labelString, $this->html);
return $this;
}
/**
* @param string $name
* @param array $paramsArray
* @return void
*/
public static function build(string $name, array $paramsArray = []): void
{
$input = new self($name, $paramsArray);
$input->create()->render();
}
}

39
src/mappers/JsonInputMapper.php Executable file
View File

@ -0,0 +1,39 @@
<?php
namespace itguild\forms\mappers;
use itguild\forms\builders\Builder;
use itguild\forms\builders\ButtonBuilder;
use itguild\forms\builders\CheckBoxBuilder;
use itguild\forms\builders\HiddenBuilder;
use itguild\forms\builders\LabelBuilder;
use itguild\forms\builders\RadioButtonBuilder;
use itguild\forms\builders\SelectBuilder;
use itguild\forms\builders\TextAreaBuilder;
use itguild\forms\builders\TextInputBuilder;
use itguild\forms\inputs\TextInput;
class JsonInputMapper
{
private static function getBuilders(): array
{
return [
"textInput" => TextInputBuilder::class,
"textArea" => TextAreaBuilder::class,
"radio" => RadioButtonBuilder::class,
"select" => SelectBuilder::class,
"button" => ButtonBuilder::class,
"checkbox" => CheckBoxBuilder::class,
"hidden" => HiddenBuilder::class,
];
}
public static function getBuilder(string $type): string
{
if(isset(self::getBuilders()[$type])){
return self::getBuilders()[$type];
}
return false;
}
}

View File

@ -0,0 +1,17 @@
<?php
namespace itguild\forms\templates\Simple;
use itguild\forms\templates\Template;
class SimpleTemplate extends Template
{
/**
* @return string
*/
public static function getInputTemplate(): string
{
return "<div class='form-group'>{label}<br>{input}</div>";
}
}

11
src/templates/Template.php Executable file
View File

@ -0,0 +1,11 @@
<?php
namespace itguild\forms\templates;
abstract class Template
{
abstract static function getInputTemplate();
}

View File

@ -0,0 +1,37 @@
<?php
namespace itguild\forms\templates\bootstrap5;
use itguild\forms\templates\Template;
class Bootstrap5Template extends Template
{
/**
* @return string
*/
public static function getInputTemplate(): string
{
return "<div class='form-group'>{label}{input}</div>";
}
public static function getTextAreaTemplate(): string
{
return "<div class='form-group'>{label}{textarea}</div>";
}
public static function getSelectTemplate(): string
{
return "<div class='form-group'>{label}{select}</div>";
}
public static function getRadioTemplate(): string
{
return "<div class='form-group'>{label}{radio}</div>";
}
public static function getCheckBoxTemplate(): string
{
return "<div class='form-group'>{label}{checkbox}</div>";
}
public static function getButtonTemplate(): string
{
return "<div class='form-group'>{label}{button}</div>";
}
}

21
src/traits/CreateOption.php Executable file
View File

@ -0,0 +1,21 @@
<?php
namespace itguild\forms\traits;
trait CreateOption
{
/**
* @param array $options
* @param $value
* @return string
*/
public function createOption(array $options, $value = null): string
{
$optionsString = "";
foreach ($options as $val => $title){
$selected = (int)$value === $val ? "selected" : "";
$optionsString .= "<option $selected value='$val'>$title</option>";
}
return $optionsString;
}
}

26
src/traits/CreateParams.php Executable file
View File

@ -0,0 +1,26 @@
<?php
namespace itguild\forms\traits;
use itguild\forms\debug\Debug;
trait CreateParams
{
/**
* @param array $data
* @return string
*/
public function createParams(array $data = []): string
{
$paramsString = "";
foreach($data as $key => $param){
if(is_string($param)){
$paramsString .= $key . "='" . $param . "'";
}
}
return $paramsString;
}
}