laravolt/semantic-form
Semantic Form
Semantic UI form builder, for Laravel.
Installation
$ composer require laravolt/semantic-form
API
Note: You can use either facade Form::method() or helper form()->method().
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)
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 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();
Text
Form::text($name, $value)->label('Username');
Number
Form::number($name, $integerValue)->label('Total');
Rupiah
Form::rupiah($name, $defaultValue = null)->label('Price');
Date
Form::date($name, $value)->label('Birthday');
Time
Form::time($name, $value)->label('Start Time');
Password
Form::password($name)->label('Password');
Form::email($name, $value)->label('Email Address');
Textarea
Form::textarea($name, $value)->label('Note');
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 & Select 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' => \Laravolt\SemanticForm\Middleware\SelectDateMiddleware::class,
'selectdatetime' => \Laravolt\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
Form::selectRange($name, $begin, $end)->label('Number of child');
Select Month
Form::selectMonth($name, $format = '%B')->label('Month');
Radio
$checked = true;
Form::radio($name, $value, $checked)->label('Item Label');
Radio Group
$values = ['apple' => 'Apple', 'banana' => 'Banana'];
$checkedValue = 'banana';
Form::radioGroup($name, $values, $checkedValue)->label('Select Fruit');
Checkbox
Form::checkbox($name, $value, $checked)->label('Remember Me');
Checkbox Group
$values = ['apple' => 'Apple', 'banana' => 'Banana'];
$checkedValue = 'banana';
Form::checkboxGroup($name, $values, $checkedValue)->label('Select Fruit');
File
Form::file($name);
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: http://semantic-ui.com/elements/input.html
Datepicker
Form::datepicker($name, $value, $format);
// 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();
Timepicker
Form::timepicker($name, $value);
Hidden
Form::hidden($name, $value);
Button
Form::button($value);
Submit
Form::submit($value);
Model Binding
Version 1
{!! Form::bind($model) !!}
Version 2
// as parameter for method open()
{!! Form::open($route, $model) !!}
// or chaining it
{!! Form::bind($model)->get($route) !!}
Warning
// This is OK in version 1, but will produce error in version 2
{!! Form::bind($model) !!}
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),
"<trix-editor input='{$id}'></trix-editor>"
);
});
And then call it like any other method:
Form::trix('contentId', 'content', '<b>some content</b>');
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 \Laravolt\SemanticForm\Elements\Wrapper(form()->submit('Submit'), form()->submit('Submit'));
});
// And then make the call simplier:
Form::action('default');
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)
// Put this on every request, e.g. in AppServiceProvider
Laravolt\SemanticForm\Elements\Hint::$defaultClass = 'custom-class';
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
- \Laravolt\SemanticForm\Middleware\SelectDateMiddleware
- \Laravolt\SemanticForm\Middleware\SelectDateTimeMiddleware
Credits
SemanticForm inspired by AdamWathan\Form.
Related Packages
This packages integrates Symfony Form Component in Laravel.
crud widgets for laravel 5.1, to make an admin in few lines of code
Version History
| Version | Released | PHP | Laravel | License |
|---|---|---|---|---|
| v4.0.2 | >=7.3 | ^6.0 | MIT | |
| v4.0.1 | >=7.3 | ^6.0 | MIT | |
| 2.14.3 | >=7.2 | 5.6.*| | MIT | |
| 2.14.2 | >=7.2 | 5.6.*| | MIT | |
| 2.14.1 | >=7.2 | 5.6.*| | MIT | |
| 2.14.0 | >=7.2 | 5.6.*| | MIT | |
| 2.13.3 | >=7.2 | 5.6.*| | MIT | |
| 2.13.2 | >=7.2 | 5.6.*| | MIT | |
| 2.13.1 | >=7.2 | 5.6.*| | MIT | |
| 2.13.0 | >=7.2 | 5.6.*| | MIT | |
| 2.12.0 | >=7.2 | 5.6.*| | MIT | |
| 2.11.2 | >=7.2 | 5.6.*| | MIT | |
| 2.11.1 | >=7.2 | 5.6.*| | MIT | |
| 2.11.0 | >=7.2 | 5.6.*| | MIT | |
| 2.10.1 | >=7.2 | 5.6.*| | MIT | |
| 2.10.0 | >=7.2 | 5.6.*| | MIT | |
| 2.9.0 | >=7.2 | 5.6.*| | MIT | |
| 2.8.5 | >=7.2 | 5.6.*| | MIT | |
| 2.8.4 | >=7.2 | 5.6.*| | MIT | |
| 2.8.3 | >=7.2 | 5.6.*| | MIT | |
| 2.8.2 | >=7.2 | 5.6.*| | MIT | |
| 2.8.1 | >=7.2 | 5.6.*| | MIT | |
| 2.8.0 | >=7.2 | 5.6.*| | MIT | |
| 2.7.0 | >=7.2 | 5.6.*| | MIT | |
| 2.6.1 | >=7.2 | 5.6.*| | MIT | |
| 2.6.0 | >=7.2 | 5.6.*| | MIT | |
| 2.5.0 | >=7.2 | 5.6.*| | MIT | |
| 2.4.1 | >=7.2 | 5.6.*| | MIT | |
| 2.4.0 | >=7.2 | 5.6.*| | MIT | |
| 2.3.1 | >=7.1.3 | 5.6.*| | MIT |
Showing the latest 30 of 73. See every release on Packagist