Repository navigation
events
Jacob Martella edited this page Jan 8, 2026
·
1 revision
Event classes for ArtisanPack UI Forms.
Events are dispatched at key points in the form lifecycle, allowing you to hook into form and submission operations.
Dispatched when a new form is created.
use ArtisanPackUI\Forms\Events\FormCreated;
// Event properties
$event->form; // Form model instance
// Listening
use Illuminate\Support\Facades\Event;
Event::listen(FormCreated::class, function (FormCreated $event) {
Log::info("Form created: {$event->form->name}");
});Dispatched when a form is updated.
use ArtisanPackUI\Forms\Events\FormUpdated;
// Event properties
$event->form; // Form model instance
// Listening
Event::listen(FormUpdated::class, function (FormUpdated $event) {
// Bust cache, notify admin, etc.
Cache::forget("form_{$event->form->slug}");
});Dispatched when a form is deleted.
use ArtisanPackUI\Forms\Events\FormDeleted;
// Event properties
$event->form; // Form model instance (soft deleted or being deleted)
// Listening
Event::listen(FormDeleted::class, function (FormDeleted $event) {
// Clean up related data
Log::warning("Form deleted: {$event->form->name}");
});Dispatched when a form is successfully submitted.
use ArtisanPackUI\Forms\Events\FormSubmitted;
// Event properties
$event->form; // Form model instance
$event->submission; // FormSubmission model instance
// Listening
Event::listen(FormSubmitted::class, function (FormSubmitted $event) {
// Send to CRM
CrmService::createLead([
'email' => $event->submission->getValue('email'),
'name' => $event->submission->getValue('name'),
]);
// Track analytics
Analytics::track('form_submission', [
'form_id' => $event->form->id,
'form_name' => $event->form->name,
]);
});Dispatched when a submission is updated.
use ArtisanPackUI\Forms\Events\SubmissionUpdated;
// Event properties
$event->submission; // FormSubmission model instance
// Listening
Event::listen(SubmissionUpdated::class, function (SubmissionUpdated $event) {
// Log changes
Log::info("Submission updated: {$event->submission->submission_number}");
});Dispatched when a submission is deleted.
use ArtisanPackUI\Forms\Events\SubmissionDeleted;
// Event properties
$event->submission; // FormSubmission model instance
// Listening
Event::listen(SubmissionDeleted::class, function (SubmissionDeleted $event) {
// Clean up external systems
CrmService::deleteLeadBySubmission($event->submission->id);
});// app/Providers/EventServiceProvider.php
use ArtisanPackUI\Forms\Events\FormSubmitted;
use App\Listeners\ProcessFormSubmission;
protected $listen = [
FormSubmitted::class => [
ProcessFormSubmission::class,
],
];// app/Listeners/ProcessFormSubmission.php
namespace App\Listeners;
use ArtisanPackUI\Forms\Events\FormSubmitted;
class ProcessFormSubmission
{
public function handle(FormSubmitted $event): void
{
$form = $event->form;
$submission = $event->submission;
// Process the submission
if ($form->slug === 'contact') {
$this->notifySlack($submission);
}
if ($form->slug === 'newsletter') {
$this->addToMailingList($submission);
}
}
protected function notifySlack($submission): void
{
// Send Slack notification
}
protected function addToMailingList($submission): void
{
// Add to mailing list
}
}// In a service provider boot() method
use ArtisanPackUI\Forms\Events\FormSubmitted;
use Illuminate\Support\Facades\Event;
Event::listen(FormSubmitted::class, function ($event) {
// Quick inline handling
Log::info('Form submitted', [
'form' => $event->form->name,
'submission' => $event->submission->id,
]);
});For time-consuming operations, implement ShouldQueue:
namespace App\Listeners;
use ArtisanPackUI\Forms\Events\FormSubmitted;
use Illuminate\Contracts\Queue\ShouldQueue;
class SendToCrm implements ShouldQueue
{
public $queue = 'integrations';
public function handle(FormSubmitted $event): void
{
// Heavy processing runs in background
CrmService::sync($event->submission);
}
}Group related listeners:
namespace App\Listeners;
use ArtisanPackUI\Forms\Events\FormCreated;
use ArtisanPackUI\Forms\Events\FormSubmitted;
use Illuminate\Events\Dispatcher;
class FormEventSubscriber
{
public function handleFormCreated(FormCreated $event): void
{
// Handle form creation
}
public function handleFormSubmitted(FormSubmitted $event): void
{
// Handle form submission
}
public function subscribe(Dispatcher $events): void
{
$events->listen(
FormCreated::class,
[self::class, 'handleFormCreated']
);
$events->listen(
FormSubmitted::class,
[self::class, 'handleFormSubmitted']
);
}
}Register in EventServiceProvider:
protected $subscribe = [
\App\Listeners\FormEventSubscriber::class,
];use ArtisanPackUI\Forms\Events\FormSubmitted;
use Illuminate\Support\Facades\Event;
test('form submission dispatches event', function () {
Event::fake([FormSubmitted::class]);
// Submit form...
$this->post('/forms/contact', $data);
Event::assertDispatched(FormSubmitted::class, function ($event) {
return $event->form->slug === 'contact';
});
});