Installation:
composer require mirzarizky/ticketid
Publish the package assets and migrations:
php artisan vendor:publish --provider="Mirzarizky\TicketId\TicketIdServiceProvider"
php artisan migrate
Configuration:
Review config/ticketid.php for default settings (e.g., ticket_prefix, default_status). No further config is needed for basic usage.
First Use Case: Create a ticket via Tinker or a controller:
use Mirzarizky\TicketId\Models\Ticket;
$ticket = Ticket::create([
'title' => 'Test Ticket',
'description' => 'This is a test ticket.',
'user_id' => auth()->id(), // Authenticated user
]);
Access the ticket ID via $ticket->ticket_id (e.g., TST-0001).
Ticket Creation:
Ticket::create() with user_id, title, and description.Mirzarizky\TicketId\Http\Requests\StoreTicketRequest for validation.Mirzarizky\TicketId\Http\Controllers\TicketController for RESTful endpoints.Ticket Management:
ticket->update(['status' => 'resolved']).ticket->users()->attach($userId).Comment model:
$ticket->comments()->create(['body' => 'Debugging...', 'user_id' => auth()->id()]);
Integration with Auth:
user_id via middleware (TicketId\Middleware\AuthenticateTicketUser).TicketIdServiceProvider::boot() to customize logic.Custom Fields:
ticket table via migrations (e.g., priority, department_id).StoreTicketRequest and UpdateTicketRequest for form validation.Searching/Filters:
$openTickets = Ticket::where('status', 'open')->with('user', 'comments')->get();
Ticket model or use Laravel Scout.Event Listeners:
ticket.created or ticket.updated to trigger notifications:
// app/Providers/EventServiceProvider.php
protected $listen = [
'ticket.created' => ['App\Listeners\SendTicketCreatedEmail'],
];
API Resources:
Mirzarizky\TicketId\Http\Resources\TicketResource or create custom resources:
php artisan make:resource CustomTicketResource
Testing:
createTicket() helper in tests:
$ticket = createTicket(['title' => 'Test', 'user_id' => $user->id]);
TicketIdServiceProvider for isolated testing.Localization:
resources/lang/en/ticketid.php).Migration Conflicts:
tickets table, reset migrations or use Schema::table() to avoid conflicts.php artisan migrate.Ticket ID Generation:
TST-). Customize ticket_prefix in config if needed.Authentication Bypass:
AuthenticateTicketUser middleware assumes Laravel’s default auth. For custom auth, override the middleware or use a trait.Soft Deletes:
Ticket model uses soft deletes. Use withTrashed() or forceDelete() explicitly if needed.Performance:
with('user', 'comments')) to avoid N+1 queries in loops.Log Ticket Events: Add a listener to debug ticket lifecycle:
// app/Listeners/LogTicketEvents.php
public function handle($event) {
\Log::info('Ticket event', ['event' => $event->getName(), 'ticket' => $event->ticket]);
}
Check Middleware:
If tickets lack user_id, verify AuthenticateTicketUser is registered in app/Http/Kernel.php.
Validation Errors:
Extend StoreTicketRequest to customize rules:
public function rules()
{
return array_merge(parent::rules(), [
'priority' => 'required|in:low,medium,high',
]);
}
Custom Statuses:
Add new statuses via migration and update config/ticketid.php:
'statuses' => [
'open', 'pending', 'resolved', 'custom_status',
],
Attachment Support:
Extend the Ticket model to support file uploads:
public function attachments()
{
return $this->morphMany('App\Models\Attachment', 'attachable');
}
API Versioning: Use Laravel’s API resources to version endpoints:
// routes/api.php
Route::apiResource('v1/tickets', 'TicketController');
Webhooks:
Integrate with external systems via ticket.created events:
// app/Listeners/SendWebhook.php
public function handle($event) {
Http::post('https://external-service.com/webhook', [
'ticket_id' => $event->ticket->ticket_id,
]);
}
update() or chunk() for batch ticket updates.laravel-activitylog to track ticket changes.TicketFactory (if available) or create() helpers for consistent test data.vendor/mirzarizky/ticketid/src/ for undocumented features (e.g., TicketId::generateId()).How can I help you explore Laravel packages today?