first
This commit is contained in:
commit
a283d2cf37
3
.gitignore
vendored
Normal file
3
.gitignore
vendored
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
.idea
|
||||||
|
vendor
|
||||||
|
composer.lock
|
18
app/active_fields/TextActiveField.php
Normal file
18
app/active_fields/TextActiveField.php
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Itguild\App\active_fields;
|
||||||
|
|
||||||
|
use Itguild\Form2\ActiveField;
|
||||||
|
|
||||||
|
class TextActiveField extends ActiveField
|
||||||
|
{
|
||||||
|
|
||||||
|
public function fetchField(): string
|
||||||
|
{
|
||||||
|
$html = '';
|
||||||
|
$html .= "</br><label for='" . $this->data['id'] . ">" . $this->data['label'] . "</label>";
|
||||||
|
$html .= "<input type='" . $this->data['type'] . "' name='" . $this->data['id'] . "' id='" . $this->data['id'] . "' class='" . $this->data['class'] . "' >";
|
||||||
|
return $html;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
15
app/forms/UserForm.php
Normal file
15
app/forms/UserForm.php
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Itguild\App\forms;
|
||||||
|
|
||||||
|
use Itguild\Form2\Form;
|
||||||
|
|
||||||
|
class UserForm extends Form
|
||||||
|
{
|
||||||
|
|
||||||
|
public function load(array $arr): void
|
||||||
|
{
|
||||||
|
parent::load($arr);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
22
composer.json
Normal file
22
composer.json
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
{
|
||||||
|
"name": "itguild/form2",
|
||||||
|
"description": "Form library",
|
||||||
|
"type": "library",
|
||||||
|
"require-dev": {},
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": {
|
||||||
|
"Itguild\\Form2\\": "src/",
|
||||||
|
"Itguild\\App\\": "app/"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Kavalar",
|
||||||
|
"email": "apuc06@mail.ru"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"minimum-stability": "dev",
|
||||||
|
"require": {
|
||||||
|
"itguild/debug": "0.1"
|
||||||
|
}
|
||||||
|
}
|
26
form.json
Normal file
26
form.json
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
{
|
||||||
|
"name": {
|
||||||
|
"label": "Имя",
|
||||||
|
"type": "text",
|
||||||
|
"id": "user_name",
|
||||||
|
"class": "form-control form-control-dark"
|
||||||
|
},
|
||||||
|
"user_email": {
|
||||||
|
"label": "Email",
|
||||||
|
"type": "email",
|
||||||
|
"id": "user_email",
|
||||||
|
"class": "form-control form-control-dark"
|
||||||
|
},
|
||||||
|
"tg": {
|
||||||
|
"label": "Telegram",
|
||||||
|
"type": "text",
|
||||||
|
"id": "user_tg",
|
||||||
|
"class": "form-control form-control-dark"
|
||||||
|
},
|
||||||
|
"phone": {
|
||||||
|
"label": "Телефон",
|
||||||
|
"type": "number",
|
||||||
|
"id": "user_phone",
|
||||||
|
"class": "form-control form-control-dark"
|
||||||
|
}
|
||||||
|
}
|
63
form.php
Normal file
63
form.php
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
require_once "form_helper.php";
|
||||||
|
require_once "Form.php";
|
||||||
|
require_once "UserForm.php";
|
||||||
|
|
||||||
|
include "header.php";
|
||||||
|
|
||||||
|
require_once "vendor/autoload.php";
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
$inputs = [
|
||||||
|
'name' => [
|
||||||
|
'label' => 'Имя',
|
||||||
|
'type' => 'text',
|
||||||
|
'id' => 'user_name',
|
||||||
|
'class' => 'inputForm',
|
||||||
|
],
|
||||||
|
'email' => [
|
||||||
|
'label' => 'Email',
|
||||||
|
'type' => 'email',
|
||||||
|
'id' => 'user_email',
|
||||||
|
'class' => 'inputForm',
|
||||||
|
],
|
||||||
|
'tg' => [
|
||||||
|
'label' => 'Telegram',
|
||||||
|
'type' => 'text',
|
||||||
|
'id' => 'user_tg',
|
||||||
|
'class' => 'inputForm',
|
||||||
|
],
|
||||||
|
'phone' => [
|
||||||
|
'label' => 'Телефон',
|
||||||
|
'type' => 'number',
|
||||||
|
'id' => 'user_phone',
|
||||||
|
'class' => 'inputForm',
|
||||||
|
],
|
||||||
|
];
|
||||||
|
|
||||||
|
$form = new UserForm([
|
||||||
|
'action' => 'save_user.php',
|
||||||
|
'method' => 'POST'
|
||||||
|
]);
|
||||||
|
$form->load($inputs);
|
||||||
|
$form->field(type: "text", name: "additional_email", params: [
|
||||||
|
'class' => 'additional_email inputForm',
|
||||||
|
'label' => 'Дполнительный email',
|
||||||
|
'id' => 'additional_email',
|
||||||
|
]);
|
||||||
|
$form->render();
|
||||||
|
|
||||||
|
$form2 = new UserForm([
|
||||||
|
'action' => "save_client.php",
|
||||||
|
'method' => 'POST'
|
||||||
|
]);
|
||||||
|
|
||||||
|
$form2->field(type: "text", name: "user_id", params: [
|
||||||
|
'class' => 'inputForm',
|
||||||
|
'label' => 'Пользователь',
|
||||||
|
'id' => 'user_id',
|
||||||
|
]);
|
||||||
|
$form2->render();
|
||||||
|
|
11
form_helper.php
Normal file
11
form_helper.php
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
function printForm(array $inputsArr): void
|
||||||
|
{
|
||||||
|
if ($_GET['show_form']) {
|
||||||
|
foreach ($inputsArr as $key => $input) {
|
||||||
|
echo "</br><label for='$key'>" . $input['label'] . "</label>";
|
||||||
|
echo "<input type='" . $input['type'] . "' name='$key' id='" . $input['id'] . "' class='" . $input['class'] . "' >";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
18
header.php
Normal file
18
header.php
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
echo "
|
||||||
|
<style>
|
||||||
|
.inputForm {
|
||||||
|
color: RED;
|
||||||
|
margin: 10px;
|
||||||
|
}
|
||||||
|
.additional_email {
|
||||||
|
color: #2c35cc;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<script>
|
||||||
|
document.addEventListener('DOMContentLoaded', () => {
|
||||||
|
console.log('form ready');
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
";
|
23
index.php
Normal file
23
index.php
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
require_once "vendor/autoload.php";
|
||||||
|
|
||||||
|
error_reporting(-1);
|
||||||
|
ini_set("display_errors", true);
|
||||||
|
|
||||||
|
$inputs = json_decode(file_get_contents(__DIR__ . "/form.json"), true);
|
||||||
|
|
||||||
|
// включаем буфер
|
||||||
|
ob_start();
|
||||||
|
|
||||||
|
// выводим информацию
|
||||||
|
include __DIR__ . "/views/index.php";
|
||||||
|
|
||||||
|
// сохраняем всё что есть в буфере в переменную $content
|
||||||
|
$content = ob_get_contents();
|
||||||
|
|
||||||
|
// отключаем и очищаем буфер
|
||||||
|
ob_end_clean();
|
||||||
|
|
||||||
|
include "views/layouts/main.php";
|
||||||
|
|
19
src/ActiveField.php
Normal file
19
src/ActiveField.php
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Itguild\Form2;
|
||||||
|
|
||||||
|
class ActiveField
|
||||||
|
{
|
||||||
|
protected array $data = [];
|
||||||
|
|
||||||
|
public function __construct(array $data)
|
||||||
|
{
|
||||||
|
$this->data = $data;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function fetchField()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
86
src/Form.php
Normal file
86
src/Form.php
Normal file
@ -0,0 +1,86 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Itguild\Form2;
|
||||||
|
|
||||||
|
class Form
|
||||||
|
{
|
||||||
|
protected array $data = [];
|
||||||
|
protected array $formParams = [];
|
||||||
|
protected string $formParamsStr = '';
|
||||||
|
protected string $html = '';
|
||||||
|
|
||||||
|
public function __construct(array $formParams = [])
|
||||||
|
{
|
||||||
|
$this->formParams = $formParams;
|
||||||
|
$this->createParams();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function _start(): void
|
||||||
|
{
|
||||||
|
$this->html .= "<form $this->formParamsStr>";
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function _end(): void
|
||||||
|
{
|
||||||
|
$this->html .= "</form>";
|
||||||
|
}
|
||||||
|
|
||||||
|
public function render(): void
|
||||||
|
{
|
||||||
|
$this->_start();
|
||||||
|
$this->createFields();
|
||||||
|
$this->_end();
|
||||||
|
echo $this->html;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function fetch(): string
|
||||||
|
{
|
||||||
|
$this->_start();
|
||||||
|
$this->createFields();
|
||||||
|
$this->_end();
|
||||||
|
return $this->html;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function field(string $type, string $name, array $params = []): void
|
||||||
|
{
|
||||||
|
$fieldArr = [];
|
||||||
|
$fieldArr['type'] = $type;
|
||||||
|
$fieldArr = array_merge($fieldArr, $params);
|
||||||
|
$this->data[$name] = $fieldArr;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function activeField()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param array $arr
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function load(array $arr): void
|
||||||
|
{
|
||||||
|
$this->data = $arr;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function createFields(): void
|
||||||
|
{
|
||||||
|
foreach ($this->data as $key => $input) {
|
||||||
|
$this->html .= "</br><label for='$key'>" . $input['label'] . "</label>";
|
||||||
|
$this->html .= "<input type='" . $input['type'] . "' name='$key' id='" . $input['id'] . "' class='" . $input['class'] . "' >";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function createParams(): void
|
||||||
|
{
|
||||||
|
foreach ($this->formParams as $key => $param){
|
||||||
|
$this->formParamsStr .= " $key='$param'";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private function setSome()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
31
views/index.php
Normal file
31
views/index.php
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* @var array $inputs
|
||||||
|
*/
|
||||||
|
|
||||||
|
use Itguild\App\forms\UserForm;
|
||||||
|
|
||||||
|
$form = new UserForm([
|
||||||
|
'action' => 'save_user.php',
|
||||||
|
'method' => 'POST'
|
||||||
|
]);
|
||||||
|
|
||||||
|
$form->load($inputs);
|
||||||
|
$form->field(type: "text", name: "additional_email", params: [
|
||||||
|
'class' => 'additional_email form-control form-control-dark',
|
||||||
|
'label' => 'Дполнительный email',
|
||||||
|
'id' => 'additional_email',
|
||||||
|
]);
|
||||||
|
$form->render();
|
||||||
|
|
||||||
|
$form2 = new UserForm([
|
||||||
|
'action' => "save_client.php",
|
||||||
|
'method' => 'POST'
|
||||||
|
]);
|
||||||
|
|
||||||
|
$form2->field(type: "text", name: "user_id", params: [
|
||||||
|
'class' => 'form-control form-control-dark',
|
||||||
|
'label' => 'Пользователь',
|
||||||
|
'id' => 'user_id',
|
||||||
|
]);
|
||||||
|
$form2->render();
|
60
views/layouts/main.php
Normal file
60
views/layouts/main.php
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* @var string $content
|
||||||
|
*/
|
||||||
|
?>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>Form2</title>
|
||||||
|
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css">
|
||||||
|
<style>
|
||||||
|
.inputForm {
|
||||||
|
color: RED;
|
||||||
|
margin: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.additional_email {
|
||||||
|
color: #2c35cc;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<script>
|
||||||
|
document.addEventListener('DOMContentLoaded', () => {
|
||||||
|
console.log('form ready');
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<header class="p-3 bg-dark text-white">
|
||||||
|
<div class="container">
|
||||||
|
<div class="d-flex flex-wrap align-items-center justify-content-center justify-content-lg-start">
|
||||||
|
<a href="/" class="d-flex align-items-center mb-2 mb-lg-0 text-white text-decoration-none">
|
||||||
|
<svg class="bi me-2" width="40" height="32" role="img" aria-label="Bootstrap">
|
||||||
|
<use xlink:href="#bootstrap"></use>
|
||||||
|
</svg>
|
||||||
|
</a>
|
||||||
|
|
||||||
|
<ul class="nav col-12 col-lg-auto me-lg-auto mb-2 justify-content-center mb-md-0">
|
||||||
|
<li><a href="#" class="nav-link px-2 text-secondary">Home</a></li>
|
||||||
|
<li><a href="#" class="nav-link px-2 text-white">Features</a></li>
|
||||||
|
<li><a href="#" class="nav-link px-2 text-white">Pricing</a></li>
|
||||||
|
<li><a href="#" class="nav-link px-2 text-white">FAQs</a></li>
|
||||||
|
<li><a href="#" class="nav-link px-2 text-white">About</a></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<form class="col-12 col-lg-auto mb-3 mb-lg-0 me-lg-3">
|
||||||
|
<input type="search" class="form-control form-control-dark" placeholder="Search..." aria-label="Search">
|
||||||
|
</form>
|
||||||
|
|
||||||
|
<div class="text-end">
|
||||||
|
<button type="button" class="btn btn-outline-light me-2">Login</button>
|
||||||
|
<button type="button" class="btn btn-warning">Sign-up</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</header>
|
||||||
|
<div class="container">
|
||||||
|
<?= $content ?>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
Loading…
x
Reference in New Issue
Block a user