alamarnissi / json-dynamic-form-builder
A dynamic JSON form builder library for PHP.
Installs: 1
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 0
Forks: 0
Open Issues: 0
pkg:composer/alamarnissi/json-dynamic-form-builder
Requires
- php: >=7.3
- ext-json: *
- beberlei/assert: ^3.2
- marc-mabe/php-enum: ^4.2
Requires (Dev)
- ramsey/uuid: ^4.0
- tm/tooly-composer-script: ^1.4
README
Create Dynamic Form-Configurations in a JSON Format to render it with your Frontend Environment of Choice
Features
- ✅ Define forms using object-oriented PHP
- 🧱 Supports all common input fields (input, checkbox, radio, select, textarea)
- 📝 Textual elements like headlines, paragraphs, quotes
- 📦 Container support (planned): Group fields in columns or sections
- 🧩 Extensible architecture (add your own field types!)
- 🔄 JSON serialization: Export your form to use in frontend apps
- 🧪 Unit test ready and clean structure
- ⚙️ Composer-ready (planned for Packagist)
Supported Form Elements
Form Fields
- Input with different Types like "text", "color", "range, "number"
- Textarea
- Single Checkbox
- Checkbox Groups
- Single RadioButton
- RadioButton Group
- Select / Select (multiple)
Text Elements
- Headlines (h1 - h6)
- Paragraphs
- Quote
- Container (div)
Extendable
Create your own Form or Text Element like Image-Uploads or totally custom Elements.
Directory Structure
JsonFormBuilder/ ├── JsonForm/ # Core classes │ ├── FormField/ # Input field types │ ├── FormTextElement/ # Text elements (headlines, paragraphs) │ ├── FormFieldCollection.php │ ├── ... ├── tests/ # PHPUnit tests ├── composer.json └── README.md
Planned Extensions
| Feature | Status | 
|---|---|
| Field validation rules | 🔜 Planned | 
| Conditional logic support | 🔜 Planned | 
| Container/grouping layout | 🔜 Planned | 
| API for frontend usage | 🔜 Planned | 
| Vue/React renderer | 🔜 Planned | 
| Submission endpoint support | 🔜 Planned | 
Planned Extensions
| Class | Description | 
|---|---|
| JsonForm | Main form container. | 
| FormFieldCollection | Manages fields. | 
| FormTextElementCollection | Manages headings, paragraphs, etc. | 
| Input,Checkbox,Select, etc. | Various field types. | 
| Headline1throughHeadline6 | Header elements. | 
| Paragraph,Quote | Textual elements. | 
Basic Example
Code
use JsonFormBuilder\JsonForm; use JsonFormBuilder\JsonForm\FormField\Checkbox; use JsonFormBuilder\JsonForm\FormField\CheckboxGroup; use JsonFormBuilder\JsonForm\FormField\Input; use JsonFormBuilder\JsonForm\FormField\Option; use JsonFormBuilder\JsonForm\FormField\OptionCollection; use JsonFormBuilder\JsonForm\FormFieldCollection; use JsonFormBuilder\JsonForm\FormTextElement\Headline1; use JsonFormBuilder\JsonForm\FormTextElement\Paragraph; use JsonFormBuilder\JsonForm\FormTextElementCollection; use Ramsey\Uuid\Uuid; $formFields = FormFieldCollection::emptyList() ->add(new Input(Uuid::uuid4()->toString(), 'Input', 3)) ->add(new Checkbox(Uuid::uuid4()->toString(), 'Checkbox', 4)) ->add(new CheckboxGroup( Uuid::uuid4()->toString(), 'CheckboxGroup', 5, OptionCollection::emptyList() ->add(new Option('A', 'A')) ->add(new Option('B', 'B')) )); $formElements = FormTextElementCollection::emptyList() ->add(new Headline1(Uuid::uuid4()->toString(), 'Your First Dynamic Form', 1)) ->add(new Paragraph(Uuid::uuid4()->toString(), 'Create your custom Form', 2)); $form = new JsonForm(Uuid::uuid4()->toString(), $formFields, $formElements);
JSON
{
   "jsonFormId":"2febf4cd-9c54-4ca4-b619-b51f6321dc8e",
   "formFields":[
      {
         "formFieldId":"afa99e5a-b585-4d3b-8d03-6c196b7c16eb",
         "label":"Input",
         "defaultValue":null,
         "required":false,
         "visible":true,
         "position":3,
         "formFieldType":"input",
         "inputType":"text",
         "class":"JsonFormBuilder\\JsonForm\\FormField\\Input"
      },
      {
         "formFieldId":"5ab7faba-3547-46c5-a237-6164879c339d",
         "label":"Checkbox",
         "position":4,
         "defaultValue":false,
         "required":false,
         "visible":true,
         "formFieldType":"checkbox",
         "class":"JsonFormBuilder\\JsonForm\\FormField\\Checkbox"
      },
      {
         "formFieldId":"1f4ca288-9f04-48b3-ba93-8367a46f84d4",
         "formFieldType":"checkbox_group",
         "label":"CheckboxGroup",
         "position":5,
         "defaultValue":[
         ],
         "required":false,
         "visible":true,
         "options":[
            {
               "label":"B",
               "value":"B"
            },
            {
               "label":"A",
               "value":"A"
            }
         ],
        "class":"JsonFormBuilder\\JsonForm\\FormField\\CheckboxGroup"
      }
   ],
   "formTextElements":[
      {
         "formTextElementId":"9a9c41b1-3ecf-4eef-a383-98567b0c8a28",
         "formTextElementType":"h1",
         "text":"Your·First·Dynamic·Form",
         "position":1,
         "class":"JsonFormBuilder\\JsonForm\\FormTextElement\\Headline1"
      },
      {
         "formTextElementId":"980954c1-acc5-4025-bc2e-97b4962fcc4f",
         "formTextElementType":"p",
         "text":"Create·your·custom·Form",
         "position":2,
         "class":"JsonFormBuilder\\JsonForm\\FormTextElement\\Paragraph"
      }
   ]
}