{"id":18575302,"url":"https://github.com/khaledsaikat/html-form","last_synced_at":"2025-04-10T08:30:46.378Z","repository":{"id":57076123,"uuid":"47223603","full_name":"khaledsaikat/html-form","owner":"khaledsaikat","description":"PHP composer library (classes) to generate html elements","archived":false,"fork":false,"pushed_at":"2020-01-18T11:36:22.000Z","size":52,"stargazers_count":8,"open_issues_count":0,"forks_count":1,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-03-24T18:46:59.345Z","etag":null,"topics":["checkbox","composer","div","email","form","html","html-element","html-form","input","labels","option","password","php","php-html","php-library","radio","select","submit","text","xml"],"latest_commit_sha":null,"homepage":"","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/khaledsaikat.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2015-12-01T23:19:19.000Z","updated_at":"2023-07-01T19:44:25.000Z","dependencies_parsed_at":"2022-08-24T14:40:39.973Z","dependency_job_id":null,"html_url":"https://github.com/khaledsaikat/html-form","commit_stats":null,"previous_names":[],"tags_count":5,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/khaledsaikat%2Fhtml-form","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/khaledsaikat%2Fhtml-form/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/khaledsaikat%2Fhtml-form/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/khaledsaikat%2Fhtml-form/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/khaledsaikat","download_url":"https://codeload.github.com/khaledsaikat/html-form/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248084870,"owners_count":21045135,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["checkbox","composer","div","email","form","html","html-element","html-form","input","labels","option","password","php","php-html","php-library","radio","select","submit","text","xml"],"created_at":"2024-11-06T23:18:33.071Z","updated_at":"2025-04-10T08:30:46.064Z","avatar_url":"https://github.com/khaledsaikat.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Html-Form\n\nLightweight PHP classes to generate html elements.\n\nThis package does not have any dependency other than php-5.4\n\n- License: MIT\n\n## Requirements\n\n- PHP 5.4.0 or above\n\n## Installation\n\n### Composer\n\n[Composer](https://getcomposer.org/) is a widely used dependency manager for PHP\npackages. This Html-Form is available on Packagist as\n[`user-meta/html`](https://packagist.org/packages/user-meta/html) and can be\ninstalled by running the `composer require` command. To enable Composer for you project, refer to the\nproject's [Getting Started](https://getcomposer.org/doc/00-intro.md)\ndocumentation.\n\nTo add this dependency using the command, run the following from within your\nproject directory:\n\n```\ncomposer require user-meta/html\n```\n\n## Get Started\n\nA quick example of generating text input with Html-Form using composer:\n\n```php\n\u003c?php\nrequire __DIR__ . '/vendor/autoload.php';\nuse UserMeta\\Html\\Html;\necho Html::text('example');\n```\n\nOutput:\n\n```html\n\u003cinput type=\"text\" value=\"example\"/\u003e\n```\n\nAlmost all types of html element can be used. (e.g: button, email, div, p etc)\n\n```php\necho Html::button('Submit Me');\necho Html::email('example email');\necho Html::div('example text');\necho Html::p('example text');\n```\n\nOutput:\n\n```html\n\u003cinput type=\"button\" value=\"Submit Me\"/\u003e\n\u003cinput type=\"email\" value=\"example email\"/\u003e\n\u003cdiv\u003eexample text\u003c/div\u003e\n\u003cp\u003eexample text\u003c/p\u003e\n```\n\n## Usage\n\n### Basic Usage\n\n#### Accepted arguments\n\nMost of the element accept two arguments:\n- `$default` : Default value\n- `$attributes` : Array of attributes\n- `echo Html::text($default, attributes);`\n\nFor options element like select, radio, it accept third argument as `$options`\n- `$options`: Array of options. The array can contains key-value pair or only values\n- `echo Html::select($default, attributes, $options);`\n\n#### using name, id and class\n\nTo assign name, id, class or any other attributes, use second arguments (`$attributes`)\n\nA text field with default value, name, id and class attributes:\n\n```php\necho Html::text('Example_Value', ['name' =\u003e 'Example_Name', 'id' =\u003e 'Example_ID', 'class' =\u003e 'Example_Class']);\n```\n\nOutput:\n\n```html\n\u003cinput type=\"text\" name=\"Example_Name\" value=\"Example_Value\" id=\"Example_ID\" class=\"Example_Class\"/\u003e\n```\n\n#### Add attributes to element\n\nYou can also add any attributes into any element:\n\n```php\necho Html::text('Example_Value', ['name' =\u003e 'Example_Name', 'data-example' =\u003e 'Example_Data']);\n```\n\nOutput:\n\n```html\n\u003cinput type=\"text\" name=\"Example_Name\" value=\"Example_Value\" data-example=\"Example_Data\"/\u003e\n```\n\n#### using required, readonly and disabled\n\n```php\necho Html::email(null, ['name' =\u003e 'Email', 'required']);\necho Html::email(null, ['name' =\u003e 'Email', 'readonly']);\necho Html::email(null, ['name' =\u003e 'Email', 'disabled']);\n```\n\nOutput:\n\n```html\n\u003cinput type=\"email\" name=\"Email\" required=\"required\"/\u003e\n\u003cinput type=\"email\" name=\"Email\" readonly=\"readonly\"/\u003e\n\u003cinput type=\"email\" name=\"Email\" disabled=\"disabled\"/\u003e\n```\n\n#### Using label\n\n```php\necho Html::email(null, [\n    'name' =\u003e 'Example_Name',\n    'label' =\u003e 'Email'\n]);\n```\n\n```php\necho Html::email(null, [\n    'name' =\u003e 'Example_Name',\n    'label' =\u003e [\n        'Example',\n        'class' =\u003e 'Class'\n    ]\n]);\n```\n\nOutput:\n\n```html\n\u003clabel\u003eEmail\u003c/label\u003e\n\u003cinput type=\"email\" name=\"Example_Name\"/\u003e\n```\n\n```html\n\u003clabel class=\"Class\"\u003eExample\u003c/label\u003e\n\u003cinput type=\"email\" name=\"Example_Name\"/\u003e\n```\n\n#### A div  with id and class attributes:\n\n```php\necho Html::div('example text', ['id' =\u003e 'Example_ID', 'class' =\u003e 'Example_Class']);\n```\n\nOutput:\n\n```html\n\u003cdiv id=\"Example_ID\" class=\"Example_Class\"\u003eexample text\u003c/div\u003e\n```\n\n#### lebel with label text, id, class and for attributes\n\n```php\necho Html::label('Some text', ['id' =\u003e 'ID', 'class' =\u003e 'Class', 'for' =\u003e 'For']);\n```\n\nOutput:\n\n```html\n\u003clabel id=\"ID\" class=\"Class\" for=\"For\"\u003eSome text\u003c/label\u003e\n```\n\n### Using checkbox\n\n#### Simple checkbox with default checked\n\n```php\necho Html::checkbox(true, ['name' =\u003e 'Name']);\necho Html::checkbox(true, ['name' =\u003e 'Name', 'value' =\u003e 'Value']);\n```\n\nOutput:\n\n```html\n\u003cinput type=\"checkbox\" name=\"Name\" value=\"1\" checked=\"checked\"/\u003e\n\u003cinput type=\"checkbox\" name=\"Name\" value=\"Value\" checked=\"checked\"/\u003e\n```\n\nPass first argument as false for default unchecked. `echo Html::checkbox(false)`\n\n#### List of checkbox\n\nCreate a list of checkboxes with default values\n\n```php\necho Html::checkbox('cat', ['name' =\u003e 'Name', 'id' =\u003e 'ID'], ['dog' =\u003e 'Dog', 'cat' =\u003e 'Cat']);\necho Html::checkbox(['cat'], ['name' =\u003e 'Name', 'id' =\u003e 'ID'], ['dog' =\u003e 'Dog', 'cat' =\u003e 'Cat']);\n```\n\nOutput\n\n```html\n\u003clabel\u003e\u003cinput type=\"checkbox\" value=\"dog\" name=\"Name\" id=\"ID_1\"/\u003e Dog\u003c/label\u003e\n\u003clabel\u003e\u003cinput type=\"checkbox\" value=\"cat\" name=\"Name\" id=\"ID_2\" checked=\"checked\"/\u003e Cat\u003c/label\u003e\n```\n**To get array of values by POST or GET method**\n\n```php\necho Html::checkbox(['cat'], ['name' =\u003e 'Name[]', 'id' =\u003e 'ID'], ['dog' =\u003e 'Dog', 'cat' =\u003e 'Cat']);\n```\n\nOutput\n\n```html\n\u003clabel\u003e\u003cinput type=\"checkbox\" value=\"dog\" name=\"Name[]\" id=\"ID_1\"/\u003e Dog\u003c/label\u003e\n\u003clabel\u003e\u003cinput type=\"checkbox\" value=\"cat\" name=\"Name[]\" id=\"ID_2\" checked=\"checked\"/\u003e Cat\u003c/label\u003e\n```\n\n\n### Using select / radio\n\n#### Create a select with default value, name and id attributes\n\n```php\necho Html::select(['cat'], ['name' =\u003e 'Name'], ['dog' =\u003e 'Dog', 'cat' =\u003e 'Cat']);\necho Html::select(['cat'], ['name' =\u003e 'Name'], ['dog', 'cat']);\n```\n\nOutput\n\n```html\n\u003cselect name=\"Name\"\u003e\n    \u003coption value=\"dog\"\u003eDog\u003c/option\u003e\n    \u003coption value=\"cat\" selected=\"selected\"\u003eCat\u003c/option\u003e\n\u003c/select\u003e\n\n\u003cselect name=\"Name\"\u003e\n    \u003coption value=\"dog\"\u003edog\u003c/option\u003e\n    \u003coption value=\"cat\" selected=\"selected\"\u003ecat\u003c/option\u003e\n\u003c/select\u003e\n```\n\n#### Create a list of radio\n\n```php\necho Html::radio(['cat'], ['name' =\u003e 'Name', 'id' =\u003e 'ID'], ['dog', 'cat']);\n```\n\nOutput\n\n```html\n\u003clabel\u003e\u003cinput type=\"radio\" value=\"dog\" name=\"Name\" id=\"ID_1\"/\u003e dog\u003c/label\u003e\n\u003clabel\u003e\u003cinput type=\"radio\" value=\"cat\" name=\"Name\" id=\"ID_2\" checked=\"checked\"/\u003e cat\u003c/label\u003e\n```\n\n### Using collection\n\nSeveral elements can be grouped together as collection\n\n```php\n$div = new Html('div');\n$div-\u003ep('Hello World');\n$div-\u003etext('example');\n$div-\u003eadd('Some plain text');\necho $div-\u003erender();\n```\n\nOutput:\n\n```html\n\u003cdiv\u003e\n    \u003cp\u003eHello World\u003c/p\u003e\n    \u003cinput type=\"text\" value=\"example\"/\u003e\n    Some plain text\n\u003c/div\u003e\n```\n\nCollection uses `Html` constructor and accept two parameters.\n- `$type` (optional): name of tag. (e.g. form, div)\n- `$attributes` (optional): array of attributes\n\n#### Form example\n\nGenerating a form using collections:\n\n```php\n$form = new Html('form', ['method' =\u003e 'POST']);\n$form-\u003ediv('Enter your email and password for login');\n$form-\u003eemail('', ['name' =\u003e 'email', 'label' =\u003e 'Email']);\n$form-\u003epassword('', ['name' =\u003e 'password', 'label' =\u003e 'Password']);\n$form-\u003esubmit('login');\necho $form-\u003erender();\n```\n\nOutput:\n\n```html\n\u003cform method=\"POST\"\u003e\n    \u003cdiv\u003eEnter your email and password for login\u003c/div\u003e\n    \u003clabel\u003eEmail\u003c/label\u003e\n    \u003cinput type=\"email\" name=\"email\"/\u003e\n    \u003clabel\u003ePassword\u003c/label\u003e\n    \u003cinput type=\"password\" name=\"password\"/\u003e\n    \u003cinput type=\"submit\" value=\"login\"/\u003e\n\u003c/form\u003e\n```\n\n#### Nested collections\n\nGenerating html template using nested collections:\n\n```php\n$html = new Html('html');\n$head = $html-\u003eimport('head');\n$head-\u003etitle('Example Title');\n$body = $html-\u003eimport('body');\n$body-\u003ep('Hello World');\necho $html-\u003erender();\n```\n\n```html\n\u003chtml\u003e\n    \u003chead\u003e\n        \u003ctitle\u003eExample Title\u003c/title\u003e\n    \u003c/head\u003e\n    \u003cbody\u003e\n        \u003cp\u003eHello World\u003c/p\u003e\n    \u003c/body\u003e\n\u003c/html\u003e\n```\n\n#### Using as xml generator\n\n```php\n$book = new Html('book');\n$book-\u003etitle('The Da Vinci Code');\n$author = $book-\u003eimport('author');\n$author-\u003ename('Dan Brown');\n$author-\u003enationality('American');\necho $book-\u003erender();\n```\n\nOutput\n\n```xml\n\u003cbook\u003e\n    \u003ctitle\u003eThe Da Vinci Code\u003c/title\u003e\n    \u003cauthor\u003e\n        \u003cname\u003eDan Brown\u003c/name\u003e\n        \u003cnationality\u003eAmerican\u003c/nationality\u003e\n    \u003c/author\u003e\n\u003c/book\u003e\n```\n\n## Advanced\n\nIt is possible to create any html element by calling their name.\n\n```php\necho Html::email('noreply@gmail.com');\necho Html::h1('Example Heading');\n```\n\nUnder the hood, we use `Html::input()` for input element and `Html::tag()` for html tag\n\nCreate an email input by using `input` method:\n\n```php\necho Html::input('email', 'noreply@gmail.com');\n```\n\nCreate h1 by using `tag` method:\n\n```php\necho Html::tag('h1', 'Example Heading');\n```\n\n### Add html to before and after elements\n\n```php\necho Html::email('', ['_before' =\u003e 'Before', '_after' =\u003e 'After']);\n```\n\nOutput\n\n```html\nBefore\u003cinput type=\"email\"/\u003eAfter\n```\n\n### Enclose with another element.\n\n```php\necho Html::email('', ['_enclose' =\u003e 'div']);\necho Html::email('', ['_enclose' =\u003e ['div', 'class' =\u003e 'Class']]);\n```\n\nOutput\n\n```html\n\u003cdiv\u003e\n    \u003cinput type=\"email\"/\u003e\n\u003c/div\u003e\n\u003cdiv class=\"Class\"\u003e\n    \u003cinput type=\"email\"/\u003e\n\u003c/div\u003e\n```\n\n### several way to set options for select / multiselect / radio / checkbox\n\n```php\n// Same value and label\necho Html::select(null, [], ['audi', 'bmw']);\n\n// Different value and label\necho Html::select(null, [], ['audi' =\u003e 'Audi', 'bmw' =\u003e 'BMW']);\n\n// Option with extra attributes\necho Html::select(null, [], ['ferrari' =\u003e ['Ferrari', 'data-origin' =\u003e 'Italy']]);\necho Html::select(null, [], [['value' =\u003e 'ferrari', 'label' =\u003e 'Ferrari', 'data-origin' =\u003e 'Italy']]);\n```\n\nOutput\n\n```html\n\u003cselect\u003e\u003coption value=\"audi\"\u003eaudi\u003c/option\u003e\u003coption value=\"bmw\"\u003ebmw\u003c/option\u003e\u003c/select\u003e\n\u003cselect\u003e\u003coption value=\"audi\"\u003eAudi\u003c/option\u003e\u003coption value=\"bmw\"\u003eBMW\u003c/option\u003e\u003c/select\u003e\n\u003cselect\u003e\u003coption value=\"ferrari\" data-origin=\"Italy\"\u003eFerrari\u003c/option\u003e\u003c/select\u003e\n\u003cselect\u003e\u003coption value=\"ferrari\" data-origin=\"Italy\"\u003eFerrari\u003c/option\u003e\u003c/select\u003e\n```\n\nMixing several way with one options array\n\n```php\necho Html::select(null, [], [\n    'audi',\n    'bmw' =\u003e 'BMW',\n    'honda' =\u003e [\n        'Honda',\n        'data-origin' =\u003e 'Japan'\n    ],\n    [\n        'value' =\u003e 'ferrari',\n        'label' =\u003e 'Ferrari',\n        'data-origin' =\u003e 'Italy'\n    ]\n]);\n```\n\nOutput\n\n```html\n\u003cselect\u003e\n    \u003coption value=\"audi\"\u003eaudi\u003c/option\u003e\n    \u003coption value=\"bmw\"\u003eBMW\u003c/option\u003e\n    \u003coption value=\"honda\" data-origin=\"Japan\"\u003eHonda\u003c/option\u003e\n    \u003coption value=\"ferrari\" data-origin=\"Italy\"\u003eFerrari\u003c/option\u003e\n\u003c/select\u003e\n```\n\nUsing numeric value\n\n```php\necho Html::select(null, [], [2 =\u003e 'Two', 4 =\u003e 'Four']);\n```\nOutput\n\n```html\n\u003cselect\u003e\n    \u003coption value=\"2\"\u003eTwo\u003c/option\u003e\n    \u003coption value=\"4\"\u003eFour\u003c/option\u003e\n\u003c/select\u003e\n```\n\n## Security\n\n### Escaping Output\n\nEscaping means stripping out unwanted data, like malformed HTML or script tags.\n\nThe library apply `esc_attr` to value attribute. `esc_url` to `href` and `src` attributes.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkhaledsaikat%2Fhtml-form","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkhaledsaikat%2Fhtml-form","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkhaledsaikat%2Fhtml-form/lists"}