PHPackages                             blackit/semantic-form - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. blackit/semantic-form

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

blackit/semantic-form
=====================

Semantic UI form helpers

v1.0(6y ago)03MITPHPPHP &gt;=7.1.3

Since Jun 3Pushed 6y agoCompare

[ Source](https://github.com/subangkit/semantic-form)[ Packagist](https://packagist.org/packages/blackit/semantic-form)[ Docs](https://github.com/blackit/semantic-form)[ RSS](/packages/blackit-semantic-form/feed)WikiDiscussions master Synced 3d ago

READMEChangelog (1)Dependencies (7)Versions (2)Used By (0)

Semantic Form
=============

[](#semantic-form)

[![SensioLabsInsight](https://camo.githubusercontent.com/696d8582f2c516bab9b4b59c6df90f4356c3b6b941cf3ab02af145acc96175eb/68747470733a2f2f696d672e736869656c64732e696f2f73656e73696f6c6162732f692f37333738393938612d346437342d343361612d383431612d6438356237343537393733342e737667)](https://insight.sensiolabs.com/projects/7378998a-4d74-43aa-841a-d85b74579734)[![Travis](https://camo.githubusercontent.com/f8058f205646827ab9a2707fd7c7652b1a4ac530e06fd16bf631623bb975b935/68747470733a2f2f696d672e736869656c64732e696f2f7472617669732f626c61636b69742f73656d616e7469632d666f726d2e737667)](https://travis-ci.org/blackit/semantic-form)[![Coverage Status](https://camo.githubusercontent.com/9fd4b612225b30cd6792257ad4affafffc2c2f5173d59e5813acdcd8bf535db5/68747470733a2f2f636f766572616c6c732e696f2f7265706f732f6769746875622f626c61636b69742f73656d616e7469632d666f726d2f62616467652e737667)](https://coveralls.io/github/blackit/semantic-form?branch=master)

[Semantic UI](http://semantic-ui.com/) form builder, for Laravel.

Installation
------------

[](#installation)

```
$ composer require blackit/semantic-form
```

API
---

[](#api)

**Note: You can use either facade `Form::method()` or helper `form()->method()`.**

### Opening Form

[](#opening-form)

```
Form::open('search'); // action="search"
Form::open()->get();
Form::open()->post();
Form::open()->put();
Form::open()->patch();
Form::open()->delete();
Form::open(); // default to method="GET"
Form::open()->action('search');
Form::open()->url('search'); // alias for action()
Form::open()->route('route.name');
Form::open()->post()->action(route('comment.store'));
```

### Opening Form (Short Syntax, Since 1.10)

[](#opening-form-short-syntax-since-110)

```
Form::open('search'); // action="search" method=POST
Form::get('search'); // action="search" method=GET
Form::post('search'); // action="search" method=POST
Form::put('search'); // action="search" method=POST _method=PUT
Form::patch('search'); // action="search" method=POST _method=PATCH
Form::delete('search'); // action="search" method=POST _method=DELETE
```

### CSRF Token

[](#csrf-token)

CSRF token will automatically generated if current form method is `POST`. To prevent token generation, you can call `withoutToken()` when opening a form.

```
Form::post('search')->withoutToken();
```

### Input Text

[](#input-text)

```
Form::text($name, $value)->label('Username');
```

### Password

[](#password)

```
Form::password($name)->label('Password');
```

### Email

[](#email)

```
Form::email($name, $value)->label('Email Address');
```

### Textarea

[](#textarea)

```
Form::textarea($name, $value)->label('Note');
```

### Select Box (Dropdown)

[](#select-box-dropdown)

```
Form::select($name, $options)->label('Choose Country');
Form::select($name, $options, $selected)->label('Choose Country');
Form::select($name, $options)->placeholder('--Select--');
Form::select($name, $options)->appendOption($key, $label);
Form::select($name, $options)->prependOption($key, $label);
```

### Select Date &amp; Date Time

[](#select-date--date-time)

```
Form::selectDate('myDate', $startYear, $endYear)->label('Birth Date');
Form::selectDateTime('myDate', $startYear, $endYear, $intervalInMinute)->label('Schedule');
```

By default, selectDate and selectDateTime will post request as `_myDate` with `['date'=>4, 'month'=>5, 'year'=>2016]` for example. To get `2016-5-4` format, you need to register middleware and use it in the routes.

```
protected $routeMiddleware = [
    'selectdate' => \BlackIT\SemanticForm\Middleware\SelectDateMiddleware::class,
    'selectdatetime' => \BlackIT\SemanticForm\Middleware\SelectDateTimeMiddleware::class
];
```

```
Route::post('myForm', ['middleware' => ['web', 'selectdate:myDate'], function (\Illuminate\Http\Request $request) {
	dd($request->input('myDate')); // Will output 2016-5-4
}]);
```

### Select Range

[](#select-range)

```
Form::selectRange($name, $begin, $end)->label('Number of child');
```

### Select Month

[](#select-month)

```
Form::selectMonth($name, $format = '%B')->label('Month');
```

### Radio

[](#radio)

```
$checked = true;
Form::radio($name, $value, $checked)->label('Item Label');
```

### Radio Group

[](#radio-group)

```
$values = ['apple' => 'Apple', 'banana' => 'Banana'];
$checkedValue = 'banana';
Form::radioGroup($name, $values, $checkedValue)->label('Select Fruit');
```

### Checkbox

[](#checkbox)

```
Form::checkbox($name, $value, $checked)->label('Remember Me');
```

### Checkbox Group

[](#checkbox-group)

```
$values = ['apple' => 'Apple', 'banana' => 'Banana'];
$checkedValue = 'banana';
Form::checkboxGroup($name, $values, $checkedValue)->label('Select Fruit');
```

### File

[](#file)

```
Form::file($name);
```

### Input Wrapper

[](#input-wrapper)

```
Form::input($name, $defaultvalue);
Form::input($name, $defaultvalue)->appendIcon('search');
Form::input($name, $defaultvalue)->prependIcon('users');
Form::input($name, $defaultvalue)->appendLabel($label);
Form::input($name, $defaultvalue)->prependLabel($label);
Form::input($name, $defaultvalue)->type("password");
```

Reference:

### Image (Not Yet Implemented)

[](#image-not-yet-implemented)

```
Form::image($name);
```

### Datepicker (experimental)

[](#datepicker-experimental)

```
// somewhere in view
Form::datepicker($name, $value, $format);

// don't forget to put this somewhere on your view
@include('semantic-form::scripts.calendar')

// Valid $format are:
// DD -> two digit date
// MM -> two digit month number
// MMMM -> month name (localized)
// YY -> two digit year
// YYYY -> full year

// To convert localized format to standard (SQL) datetime format, you can use Jenssegers\Date\Date library (already included):
// Jenssegers\Date\Date::createFromFormat('d F Y', '12 februari 2000')->startOfDay()->toDateTimeString();
// Jenssegers\Date\Date::createFromFormat('d F Y', '12 februari 2000')->startOfDay()->toDateString();
```

See [Semantic-Org/Semantic-UI#3256](https://github.com/Semantic-Org/Semantic-UI/pull/3256) for further discussion. Remember, you must include calendar.js and calendar.css on your own.

### Hidden

[](#hidden)

```
Form::hidden($name, $value);
```

### Button

[](#button)

```
Form::button($value);
```

### Submit

[](#submit)

```
Form::submit($value);
```

### Model Binding

[](#model-binding)

#### Version 1

[](#version-1)

```
{!! Form::bind($model) !!}
```

#### Version 2

[](#version-2)

```
// as parameter for method open()
{!! Form::open($route, $model) !!}

// or chaining it
{!! Form::bind($model)->get($route) !!}
```

#### Warning

[](#warning)

```
// This is OK in version 1, but will produce error in version 2
{!! Form::bind($model) !!}
```

### Macro

[](#macro)

Macro definition, put it anywhere within your application, e.g. AppServiceProvider:

```
Form::macro('trix', function ($id, $name, $value = null) {
    return sprintf(
        "%s %s",
        Form::hidden($name, $defaultValue)->id($id),
        ""
    );
});
```

And then call it like any other method:

```
Form::trix('contentId', 'content', 'some content');
```

### Action

[](#action)

```
// Method 1

Form::action(Form::submit('Save'), Form::button('cancel'));

// Method 2

// Assumed you already define some macros:
Form::macro('submit', function(){
    return form()->submit('Submit');
});

Form::macro('cancel', function(){
    return form()->button('Cancel');
});

// Then you can just call macro name as string
Form::action('submit', 'cancel');

// Method 3

// Even further, you can define macro thats just wrap several buttons:
SemanticForm::macro('default', function(){
    return new \BlackIT\SemanticForm\Elements\Wrapper(form()->submit('Submit'), form()->submit('Submit'));
});

// And then make the call simplier:
Form::action('default');
```

### General Function

[](#general-function)

For every form element, you can call and chaining following methods:

- id($string)
- addClass($string)
- removeClass($string)
- attribute($name, $value)
- data($name, $value)
- hint($text) (Since 1.10.0)
- hint($text, $class = "hint") (Since 1.10.2)

#### Override Hint class globally (Since 1.10.2)

[](#override-hint-class-globally-since-1102)

```
// Put this on every request, e.g. in AppServiceProvider
BlackIT\SemanticForm\Elements\Hint::$defaultClass = 'custom-class';
```

#### Example

[](#example)

```
Form::text($name, $value)->label('Username')->id('username')->addClass('foo');
Form::text($name, $value)->label('Username')->data('url', 'http://id-laravel.com');
Form::password($name, $value)->label('Password')->hint('Minimum 6 characters');
Form::password($name, $value)->label('Password')->hint('Minimum 6 characters', 'my-custom-css-class');
```

### Middleware

[](#middleware)

- \\BlackIT\\SemanticForm\\Middleware\\SelectDateMiddleware
- \\BlackIT\\SemanticForm\\Middleware\\SelectDateTimeMiddleware

Credits
-------

[](#credits)

SemanticForm inspired by [AdamWathan\\Form](https://github.com/adamwathan/form).

###  Health Score

23

—

LowBetter than 27% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity3

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity54

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Unknown

Total

1

Last Release

2537d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/c04dc2111a7d069928342315a200716d0c18b841453858e250d399bbab90deab?d=identicon)[subangkit](/maintainers/subangkit)

---

Top Contributors

[![subangkit](https://avatars.githubusercontent.com/u/541059?v=4)](https://github.com/subangkit "subangkit (1 commits)")

---

Tags

laravelformsemantic uiblackit

###  Code Quality

TestsPHPUnit

Code StylePHP\_CodeSniffer

### Embed Badge

![Health badge](/badges/blackit-semantic-form/health.svg)

```
[![Health](https://phpackages.com/badges/blackit-semantic-form/health.svg)](https://phpackages.com/packages/blackit-semantic-form)
```

###  Alternatives

[anahkiasen/former

A powerful form builder

1.4k1.4M14](/packages/anahkiasen-former)[laravolt/semantic-form

Semantic UI form helpers

5213.0k2](/packages/laravolt-semantic-form)[barryvdh/laravel-form-bridge

This packages integrates Symfony Form Component in Laravel.

163354.8k1](/packages/barryvdh-laravel-form-bridge)[erlandmuchasaj/laravel-gzip

Gzip your responses.

40129.3k2](/packages/erlandmuchasaj-laravel-gzip)[bgaze/bootstrap-form

Bootstrap 4 forms builder for Laravel 5.8+

5243.5k](/packages/bgaze-bootstrap-form)[inkvizytor/fluentform

Form builder for Laravel

3416.2k](/packages/inkvizytor-fluentform)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
