Package Data | |
---|---|
Maintainer Username: | IlyaSavich |
Maintainer Contact: | ilia.savich.97@gmail.com (IlyaSavich) |
Package Create Date: | 2017-03-28 |
Package Last Update: | 2018-08-04 |
Language: | PHP |
License: | MIT |
Last Refreshed: | 2024-11-18 15:00:13 |
Package Statistics | |
---|---|
Total Downloads: | 38 |
Monthly Downloads: | 0 |
Daily Downloads: | 0 |
Total Stars: | 1 |
Total Watchers: | 2 |
Total Forks: | 0 |
Total Open Issues: | 0 |
The form builder service for Laravel
composer require ilyasavich/form-builder
in app.php config
'providers' => [
// ...
Savich\FormBuilder\FormServiceProvider::class,
],
php artisan vendor:publish --provider="Savich\FormBuilder\FormServiceProvider" --tag=config
To create new form first of all extending base Form
class and overwrite method make
.
This method implements form building logic
use Savich\FormBuilder\Form;
use Savich\FormBuilder\FormBuilder;
class UserForm extends Form
{
protected function make(FormBuilder $builder): FormBuilder
{
}
}
The package provide to create all available html inputs.
To add new input in your form class you need call add
method of builder instance.
It signature
public function add(string $inputNamespace, string $name, $value = null, array $options = []) : Input
To create simple input write ...
use Savich\FormBuilder\Form;
use Savich\FormBuilder\FormBuilder;
use Savich\FormBuilder\Inputs\EmailInput;
class UserForm extends Form
{
protected function make(FormBuilder $builder): FormBuilder
{
$builder->add(EmailInput::class, 'email');
}
}
Here are several methods to customize input
// you can set input attributes in different ways
// also you can specify default input value
$value = 'Hello World!';
$attributes = ['class' => 'form-control'];
$builder->add(TextInput::class, 'input_name', $value)->attributes($attributes);
$builder->add(TextInput::class, 'input_name', $value, $attributes);
$builder->add(TextInput::class, 'input_name')->label('My Label');
By default inputs will generating in such format
$builder->add(TextInput::class, 'input_name');
// generated view
<div class="form-group">
<input type="text" name="input_name">
</div>
If you don't need to wrap input by group
$builder->add(TextInput::class, 'input_name')->withoutGroup();
// generated view
<input type="text" name="input_name">
You can customize group attributes
$builder->add(TextInput::class, 'input_name')->groupAttributes(['class' => 'my-class', 'inputID']);
// generated view
<div class="my-class" id="inputID">
<input type="text" name="input_name">
</div>
If you need specific input generating you can overwrite default view by your custom
$builder->add(TextInput::class, 'input_name')->view('path.to.view');
In case where you need to overwrite view without group you can ...
//this will overwrite code inside form-group div
$builder->add(TextInput::class, 'input_name')->internalView('path.to.view');
When you need to overwrite only group you can ...
In view you have $input
object that is an instance of your input class.
$builder->add(TextInput::class, 'input_name')->view('path.to.view');
// in resources.views.path.to.view
// in withoutGroupView there path to internal view, you can specify custom or there will be default
<div {!! $input->generateGroupAttributes() !!}>
// write custom stuff ...
@include($input->withoutGroupView)
</div>
The you can find list of available properties of $input
object
| Name | Description
|:-------------------|:------------
| $name
| Input name
| $value
| Input value
| $attributes
| Input attributes
| $label
| Input label in html
| $view
| Path to input group view. Will be null
if you don't set it in view()
method
| $defaultView
| Path to default group view. You can set it in config file
| $groupAttributes
| Array of group attributes
| $before
| Array of inputs that must be inserted inside group before current
| $after
| Array of inputs that must be inserted inside group after current
| $withoutGroup
| Can be set by call withoutGroup()
method. Indicates that need generate input without wrapping group
| $withoutGroupView
| Path to view inside group
| $model
| Model that will be binding for input
For example you need to create simple login form with at least two inputs. Ok, it will something like that
use Savich\FormBuilder\Form;
use Savich\FormBuilder\FormBuilder;
class LoginForm extends Form
{
protected function make(FormBuilder $builder)
{
$builder->email('email')->label('Email');
$builder->password('password')->label('Password');
$builder->submit('Save');
}
}
After that you need to add this form in controller action
class LoginController extends Controller
{
public function showLoginForm(LoginForm $form)
{
$formHtml = $form->create();
return view('login')->with('form', $formHtml);
}
}
And, finally, render form in view file
in resources/views/login.blade.php
{!! $form !!}
Lets create action for submitting login form. In our controller
class LoginController extends Controller
{
// ...
public function login(LoginForm $form)
{
$form->request(); // access to request
// login logic
}
}