Forms - v1.0.0-beta1
Form Renderer
The Form Renderer component displays forms to your users and handles submission processing.
Basic Usage
By Slug (Recommended)
<livewire:forms::form-renderer slug="contact-us" />
By Form ID
<livewire:forms::form-renderer :form-id="1" />
Component Properties
| Property | Type | Default | Description |
|---|---|---|---|
slug |
string | null | Form slug to display |
form-id |
int | null | Form ID to display |
success-message |
string | null | Override default success message |
redirect-url |
string | null | URL to redirect after submission |
show-title |
bool | true | Show form title |
show-description |
bool | true | Show form description |
css-class |
string | '' | Additional CSS classes |
Examples
Custom Success Message
<livewire:forms::form-renderer
slug="contact"
success-message="We'll be in touch within 24 hours!"
/>
Redirect After Submission
<livewire:forms::form-renderer
slug="signup"
redirect-url="/welcome"
/>
Hide Title and Description
<livewire:forms::form-renderer
slug="newsletter"
:show-title="false"
:show-description="false"
/>
Custom Styling
<livewire:forms::form-renderer
slug="contact"
css-class="bg-white p-6 rounded-lg shadow"
/>
Form States
The renderer handles several form states:
Loading State
While the form is loading:
<div wire:loading>
Loading form...
</div>
Success State
After successful submission, displays the success message or redirects.
Error State
Validation errors are displayed inline next to each field.
Customizing the Form View
Publish the views to customize:
php artisan vendor:publish --tag=forms-views
Edit resources/views/vendor/forms/livewire/form-renderer.blade.php.
View Structure
{{-- resources/views/vendor/forms/livewire/form-renderer.blade.php --}}
<div class="form-wrapper {{ $cssClass }}">
@if ($showTitle && $form->name)
<h2 class="form-title">{{ $form->name }}</h2>
@endif
@if ($showDescription && $form->description)
<p class="form-description">{{ $form->description }}</p>
@endif
@if ($submitted)
<div class="form-success">
{{ $successMessage ?? $form->success_message }}
</div>
@else
<form wire:submit="submit">
@foreach ($form->fields as $field)
@include("forms::partials.fields.{$field->type}", ['field' => $field])
@endforeach
<button type="submit">
{{ $form->submit_button_text ?? 'Submit' }}
</button>
</form>
@endif
</div>
Custom Field Templates
Create custom field templates in resources/views/vendor/forms/partials/fields/:
{{-- resources/views/vendor/forms/partials/fields/text.blade.php --}}
<div class="form-group">
<label for="{{ $field->name }}">
{{ $field->label }}
@if ($field->required)
<span class="required">*</span>
@endif
</label>
<input
type="text"
id="{{ $field->name }}"
wire:model="formData.{{ $field->name }}"
placeholder="{{ $field->placeholder }}"
class="@error($field->name) is-invalid @enderror"
>
@if ($field->help_text)
<small class="help-text">{{ $field->help_text }}</small>
@endif
@error($field->name)
<span class="error">{{ $message }}</span>
@enderror
</div>
Embedding in Controllers
Access form data in your own controllers:
use ArtisanPackUI\Forms\Services\FormService;
class PageController extends Controller
{
public function show(FormService $formService, string $slug)
{
$form = $formService->getBySlug($slug);
return view('page', [
'form' => $form,
]);
}
}
Then in your view:
@if ($form && $form->is_active)
<livewire:forms::form-renderer :form-id="$form->id" />
@else
<p>This form is currently unavailable.</p>
@endif
Handling Submission Events
Listen for form submission in your JavaScript:
document.addEventListener('livewire:initialized', () => {
Livewire.on('form-submitted', (event) => {
const { formId, submissionId } = event;
// Track conversion
gtag('event', 'form_submission', {
'form_id': formId,
});
});
});
AJAX Submission
Forms submit via Livewire by default (AJAX). For traditional form submission:
<livewire:forms::form-renderer
slug="contact"
:ajax="false"
/>
Accessibility
The form renderer follows WCAG guidelines:
- Proper label associations
- ARIA attributes for errors
- Focus management
- Keyboard navigation
- Screen reader announcements
Next Steps
- Submissions - View and manage submissions
- Notifications - Configure email notifications
- Multi-Step Forms - Multi-step form display