Weave Code
Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Tickets For Laravel Laravel Package

roundly-consulting/tickets-for-laravel

A Laravel package that adds ticketing support to your application, providing models, migrations, and helpers for creating, tracking, and managing support tickets out of the box. Integrates with Eloquent and Blade views for quick setup and customization.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

This is a Laravel-native ticketing/support package with an opinionated domain model: tickets, agents as assignees, guest requesters, guest link tokens, ticket lifecycle transitions, requester-editable custom fields, activity logging, policies, and a testing fake. The 1.0.3 release is patch-level, but it carries two behaviorally significant changes a TPM should not treat as routine patch noise: the opt-in HTTP API now fails closed when its switch is unset, and tickets:doctor / php artisan about now agree on how that switch is read. Teams upgrading from 1.0.0 should also fold in the 1.0.1 fixes (policy expansion, date-only upper bounds, link deletion, guest-watch race), which remain relevant.

Architecture fit. The package fits a Laravel monolith or modular monolith where the host application already owns authentication and authorization. It expects the host User model to implement Contracts\Assignee via Concerns\IsTicketAssignee; that is a hard prerequisite for claim() and assign(), and missing it fails at runtime with InvalidAssigneeException. The documented is_support flag is illustrative — the host must map it to its own agent flag. The package also ships an opt-in HTTP API surface, controlled by routes.enabled in config/tickets.php and the TICKETS_ROUTES environment variable; 1.0.3 makes that surface explicit at the architecture boundary rather than implicitly on. Adoption therefore touches the host's user model, authorization model, route/API exposure decision, and operational runbook — not just package installation.

Integration feasibility. Installation is supported by tickets:install and tickets:doctor, which lowers initial setup cost. The testing fake (Tickets::fake(), assertGuestLinkIssued) is useful for integration tests, and the 1.0.1 release improved fidelity for guest-link assertions. However, the package's footprint is non-trivial: migrations, routes, policies, lifecycle configuration, custom fields, guest-link behavior, and activity entries. Feasibility is good for a team already comfortable with Laravel policies, gates, route registration, and package publishing; it is weaker for teams expecting a drop-in SaaS-style helpdesk. The 1.0.3 fail-closed fix actually improves feasibility for new installs, because the API no longer turns on by accident.

Technical risk. The highest 1.0.3 risk is operational rather than syntactic: any existing installation that published config/tickets.php without a routes.enabled key (or with it set to null) was previously serving the API and will now stop serving it after upgrade. That is a security-correct fix, but it can break API consumers, health checks, and integration tests. Mitigation is explicit configuration in each environment (routes.enabled set, or TICKETS_ROUTES=on where the API is required), verified via php artisan about and tickets:doctor. The dependency change — requiring package-toolkit ^1.4.0 — is a maintenance-level constraint bump; confirm it does not conflict with other packages pinned to an older toolkit major.

Carried forward from 1.0.1 and still relevant: TicketPolicy::update() called without attributes now returns whether the requester may edit anything at all when requester_can_edit is off but an active requester_editable field exists — a correctness fix that expands authorization in a patch release; any host UI or API relying on @can('update', $ticket) as a coarse gate should be regression-tested. The date-only upper-bound fix means filter[created_to], filter[due_to], and datetime custom-field bounds now include the whole named day, which can shift counts, exports, and tests. The link-deletion fix corrects a genuine data-integrity bug, but any workaround that compensated for reversed deletion must be removed. The guest-conversion watch fix addresses a race but changes watch ownership semantics during conversion. tickets:doctor now treats the shipped lifecycle's ambiguous resolved → closed path as acceptable while custom lifecycles still warn — good, but support teams need to know that transitioning a resolved ticket by status object can throw and must be done by name.

Key questions. Which Laravel and PHP versions are supported, and which package-toolkit versions are compatible with the rest of the host's dependency graph? Does the product require the package's HTTP API at all, and if so, in which environments must routes.enabled / TICKETS_ROUTES=on be explicitly set? Does the package provide API-only endpoints, Blade/Inertia/Livewire UI, or both? What is the guest-link security model — token expiry, revocation, scope, rate limiting? How are activity entries retained and audited? Does it support multi-tenancy or per-team agent scoping? Are notifications and queued jobs included, or host-owned? What is the expected ticket volume and index strategy for custom-field filters? For upgrades from 1.0.0 or 1.0.1, which policy, date-filter, and API-route behaviors were relied on in tests, reports, or external clients?

Integration Approach

Stack fit. The package is a reasonable fit for a Laravel application with an existing User model, Gate/Policy usage, and a relational database. It is less suitable if the product needs a fully hosted helpdesk UI, complex SLA automation, or multi-tenant isolation out of the box — those should be validated before commitment. The host application should treat the package as a domain module with clear boundaries: ticket CRUD, assignment, guest links, lifecycle, custom fields, activity, and the opt-in HTTP API are package-owned; identity, agent-role mapping, notifications, API exposure policy, and presentation are host-owned or explicitly configured.

Migration path. Sequence the integration as: install and publish config/migrations; decide explicitly whether the HTTP API is in scope and set routes.enabled / TICKETS_ROUTES per environment; implement Contracts\Assignee with Concerns\IsTicketAssignee on the User model; map the host's agent flag to the package's expected flag; define lifecycle statuses and transitions, including how resolved tickets should be closed; configure custom fields and requester_can_edit / requester_editable behavior; wire guest-link routes and security controls; run tickets:doctor and confirm php artisan about reports the expected Routes ON/OFF state; then build smoke tests with Tickets::fake(). For an existing 1.0.x installation, pin ^1.0.3, audit published configs for a missing or null routes.enabled, review the policy and date-bound changes against existing tests, remove any link-deletion workarounds, and re-run guest-conversion scenarios.

Compatibility. The release notes indicate no deprecations and no explicit breaking changes, so this should be a low-churn code upgrade. The compatibility risk is behavioral, not syntactic: API routes may disappear (fail-closed), authorization results may differ (1.0.1 policy fix), date-filter inclusivity shifts, link-deletion direction changes, and guest watch ownership can change during conversion. The package-toolkit ^1.4.0 requirement is a constraint-level compatibility item worth resolving before merge. Treat 1.0.3 as a "test-first" patch: upgrade in a branch, run authorization, API-contract, and reporting regression suites, and only then promote.

Sequencing. A pragmatic sequence is: (1) resolve the package-toolkit constraint and run a technical spike in a branch with tickets:doctor clean and about reporting the intended route state; (2) make the API switch explicit in every environment's config or env file; (3) user-model and agent-flag integration; (4) policy/gate regression, especially attribute-less update checks; (5) guest-link security and conversion review; (6) lifecycle configuration and runbook note for transitioning by name; (7) custom-field and filter/report validation; (8) staged rollout behind a feature flag; (9) post-rollout monitoring of API reachability, assignment failures, guest-link failures, and ticket-edit authorization.

Operational Impact

Maintenance. The host team owns the user-model trait, agent-flag mapping, lifecycle configuration, custom fields, guest-link policy, API exposure configuration, and any presentation layer. The vendor owns package internals, but patch releases can change observable behavior, so the team needs a lightweight upgrade checklist covering API route state, authorization, date filters, guest links, and lifecycle transitions. Budget ongoing maintenance for dependency updates — including tracking the package-toolkit line — and regression tests around the behaviors corrected in 1.0.1 and 1.0.3.

Support. tickets:doctor should be the first diagnostic step, and as of 1.0.3 it agrees with php artisan about on the route switch, which makes triage materially easier: a published config missing routes.enabled now shows Routes OFF in about and produces a doctor warning that says the HTTP API is off, rather than falsely reporting it as served. Support staff should still understand the doctor's limits: it now accepts the shipped lifecycle's ambiguous target with a note to transition by name, while custom lifecycles still warn. The most common installation failure remains a missing Assignee contract or a misconfigured agent flag, producing InvalidAssigneeException on claim()/assign(). The runbook should also cover guest-link issuance and conversion, since those paths have dedicated test helpers and recent bug fixes.

Scaling. The package is database-backed, so ticket volume, guest-link volume, activity-log growth, and custom-field filter queries will drive scaling. Plan indexes for ticket list filters, custom-field lookups, and activity queries; define retention or archival for activity entries and expired guest links. If the HTTP API is enabled, size its rate limits and caching separately from web traffic, and treat the toggle as a per-environment scaling and blast-radius control. If notifications are queued, validate worker throughput and retry behavior. The guest-conversion watch race is fixed, but conversion under concurrent user activity should still be load-tested if guest-to-user conversion is a core workflow.

Failure modes. Watch for: missing Assignee implementation causing assignment/claim failures; incorrect agent-flag mapping causing no agents or all users to be treated as agents; the HTTP API silently going dark after upgrade because routes.enabled was absent or null; a package-toolkit version conflict blocking composer update; attribute-less policy checks allowing requester edits that the UI did not expect; date-only upper bounds now including the full day and shifting reports; link-deletion direction changes breaking workaround code; lifecycle transitions by status object throwing on resolved tickets; and guest-conversion watch conflicts under concurrency. Each should have a test or runbook entry before rollout — the API switch case specifically should have an external health check so a fail-closed configuration change is caught in staging, not in production.

Ramp-up. Expect roughly one to two backend developers for initial integration, plus product/ops time to define lifecycle, custom fields, guest-link policy, and API exposure. A reasonable ramp-up is a few days for installation and smoke testing, one to two weeks for policy, guest-link, API, and reporting validation, and additional time for support training. The package is approachable for a Laravel-fluent team, and 1.0.3's doctor/about parity reduces diagnostic friction, but it is not a zero-configuration product; the TPM should explicitly schedule authorization regression, API-contract verification, and reporting reconciliation as acceptance gates.

Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
gmostafa/php-graphql-client
xeviant/paystack
snowsoft/faker
meditationsteps/blogetc
animalyoung/laravel-influxdb
onix-solutions/sms-telera
lonely-lights/prosetta
oxygen/data
oxygen/core
jengo/base
xiloryx/log-collector
a21ns1g4ts/filament-stripe
la-php/laravel-admin
artisan-build/community-prompts
vleroy/smart
ayles-software/laravel-australian-public-holidays
cboxdk/laravel-id-spatie
cboxdk/laravel-id-billing
cboxdk/laravel-id-billing-bridge
simple-as-fuck/php-performance-log