--- title: Usage Overview --- # Usage Overview ArtisanPack UI Forms provides two main interfaces for working with forms: 1. **Admin Interface** - A web-based UI for creating and managing forms 2. **Programmatic API** - PHP classes and services for custom integrations ## Admin Interface The admin interface is available at `/admin/forms` (configurable) and provides: - **Form Builder** - Drag-and-drop interface for creating forms - **Form List** - View and manage all forms - **Submissions** - View, search, and export form submissions - **Notifications** - Configure email notifications ### Accessing the Admin By default, the admin routes use the `web` and `auth` middleware. Ensure users are authenticated to access the admin interface. ```php // config/artisanpack/forms.php 'admin' => [ 'prefix' => 'admin/forms', 'middleware' => ['web', 'auth'], ], ``` ## Displaying Forms Use the `FormRenderer` Livewire component to display forms: ```blade {{-- By slug (recommended) --}} {{-- By form ID --}} {{-- With custom success message --}} {{-- With redirect after submission --}} ``` ## Creating Forms Programmatically For custom integrations, create forms using the models directly: ```php use ArtisanPackUI\Forms\Models\Form; use ArtisanPackUI\Forms\Models\FormField; // Create a form $form = Form::create([ 'name' => 'Newsletter Signup', 'slug' => 'newsletter', 'description' => 'Subscribe to our newsletter', 'is_active' => true, 'success_message' => 'Thank you for subscribing!', ]); // Add fields FormField::create([ 'form_id' => $form->id, 'type' => 'email', 'name' => 'email', 'label' => 'Email Address', 'placeholder' => 'you@example.com', 'required' => true, 'order' => 1, ]); ``` ## Using Services The package provides service classes for complex operations: ```php use ArtisanPackUI\Forms\Services\FormService; use ArtisanPackUI\Forms\Services\SubmissionService; // Inject services public function __construct( private FormService $formService, private SubmissionService $submissionService, ) {} // Get form by slug $form = $this->formService->getBySlug('contact'); // Create submission $submission = $this->submissionService->create($form, [ 'name' => 'John Doe', 'email' => 'john@example.com', 'message' => 'Hello!', ]); ``` ## Event Handling Subscribe to events for custom processing: ```php use ArtisanPackUI\Forms\Events\FormSubmitted; use Illuminate\Support\Facades\Event; // In a service provider Event::listen(FormSubmitted::class, function ($event) { $form = $event->form; $submission = $event->submission; // Custom processing Log::info("New submission for form: {$form->name}"); }); ``` Available events: - `FormCreated` - Fired when a form is created - `FormUpdated` - Fired when a form is updated - `FormDeleted` - Fired when a form is deleted - `FormSubmitted` - Fired when a form is submitted - `SubmissionUpdated` - Fired when a submission is updated - `SubmissionDeleted` - Fired when a submission is deleted ## Filter Hooks Use filter hooks to customize behavior: ```php use function addFilter; // Customize notification message addFilter('forms.notification_message', function ($message, $notification, $submission) { return $message . "\n\nProcessed at: " . now()->format('Y-m-d H:i:s'); }); // Add custom validation addFilter('forms.validation_rules', function ($rules, $form) { // Add custom rules $rules['email'] = 'required|email|ends_with:@company.com'; return $rules; }); ``` ## Field Types The package supports 20+ field types: | Type | Description | |------|-------------| | `text` | Single-line text input | | `email` | Email address input | | `textarea` | Multi-line text area | | `select` | Dropdown selection | | `checkbox` | Single checkbox | | `checkbox_group` | Multiple checkboxes | | `radio` | Radio button group | | `file` | File upload | | `date` | Date picker | | `time` | Time picker | | `datetime` | Date and time picker | | `number` | Numeric input | | `phone` | Phone number input | | `url` | URL input | | `password` | Password input | | `hidden` | Hidden field | | `html` | Static HTML content | | `heading` | Section heading | | `divider` | Visual divider | ## Next Steps - [Form Builder](./form-builder.md) - Create forms with the drag-and-drop builder - [Form Renderer](./form-renderer.md) - Display forms on your site - [Submissions](./submissions.md) - Manage form submissions - [Notifications](./notifications.md) - Configure email notifications