composer require abdallahmohammed/laravel-multistep-forms
use AbdallaMohammed\Form\Form;
use Illuminate\Support\Facades\Route;
Route::get('form', function () {
return app(Form::class)->make(function (Form $form) {
// Create a step instance and define rules, messages and attributes
$form->step()->rules([
'name' => ['required', 'string'],
])->messages([
'required' => ':attribute Required',
])->attributes([
'name' => 'Name',
]);
// Add another step with dynamic rules
$form->step()->dynamicRules();
});
})->name('form');
Define a callback to fired before a step has been validated.
Return a response from this hook to return early before validation occurs.
before($step, Closure $closure)
$step could be Step instance, or the number of the step.
Define a callback to fired after a step has been validated. Step Number or * for all.
Return a response from this hook to return early before the form step is incremented.
after($step, Closure $closure)
$step could be Step instance, or the number of the step.
You can set a step as dynamic, so the step will take it's rules, messages and attributes from the request.
For example
use AbdallaMohammed\Form\Form;
use Illuminate\Support\Facades\Route;
Route::get('form', function () {
return app(Form::class)->make(function (Form $form) {
...
$form->step()->dynamicRules()->messages([
'foo' => 'bar',
]);
...
});
})->name('form');
From the example we have defined the attributes without the rules, so we must send the rules with the request. Here it is the example of the request body.
{
"step": 1,
"1.rules": {
"name": ["required", "string"]
}
}
1.rules is a reference to first step rules.
You can change 1 to the number of the dynamic step.
As the previous example you can send 1.messages and 1.attributes in the request body.
Get the current step config, or a specific step config.
Get a field value from the form state (session / old input) or fallback to a default.
Set a field value from the session form state.
Get the current saved step number.
Get the requested step number.
Get the current step number.
Determine if the current step the last step.
Determine if the specified step is in the past.
Determine if the specified step is active.
Determine if the specified step is in the next.
Get the array representation of the form state as a collection.
Get the array representation of the form state.