Installation:
composer require baks-dev/support baks-dev/support-answer
baks-dev/support and baks-dev/support-answer are listed in composer.json.Publish Configurations (if applicable):
php artisan vendor:publish --provider="BaksDev\Support\SupportServiceProvider" --tag="config"
config/support.php for default settings (e.g., queue drivers, logging).Run Migrations:
php artisan migrate
support_messages, support_answers) for schema details.First Use Case:
use BaksDev\Support\Facades\Support;
// Send a message via facade
$message = Support::message()
->from('user@example.com')
->subject('API Issue')
->body('Failed to authenticate')
->send();
// Or via a model (if using Eloquent integration)
$user = User::find(1);
$user->sendSupportMessage('API Error', 'Error details here...');
Verify with Tests:
php bin/phpunit --group=support
Message Lifecycle:
Support::message() or model methods (e.g., User::sendSupportMessage()).$message->assignTo($agent);
$message->resolve('Issue fixed');
$message->addAnswer('Thanks for your help!');
Event-Driven Extensions:
// Example: Listen for message sent events
event(new \BaksDev\Support\Events\MessageSent($message));
EventServiceProvider:
protected $listen = [
\BaksDev\Support\Events\MessageSent::class => [
\App\Listeners\LogSupportMessage::class,
],
];
Queue Integration:
$message = Support::message()->delay(60)->send();
config/support.php:
'queue' => [
'driver' => 'database', // or 'redis', 'beanstalkd'
],
Custom Fields:
namespace App\Models;
use BaksDev\Support\Models\SupportMessage;
use Illuminate\Database\Eloquent\Relations\MorphMany;
class CustomSupportMessage extends SupportMessage
{
public function customFields()
{
return $this->morphMany(CustomField::class, 'fieldable');
}
}
API Integration:
Route::middleware('auth:sanctum')->group(function () {
Route::apiResource('support/messages', \BaksDev\Support\Http\Controllers\MessageController::class);
});
namespace App\Http\Resources;
use BaksDev\Support\Models\SupportMessage;
use Illuminate\Http\Resources\Json\JsonResource;
class SupportMessageResource extends JsonResource
{
public function toArray($request)
{
return [
'id' => $this->id,
'subject' => $this->subject,
'status' => $this->status,
// Custom fields
];
}
}
auth:sanctum) for API access.$message->notify(new \App\Notifications\SupportMessageCreated($message));
Echo.channel('support.messages')
.listen('SupportMessageUpdated', (e) => {
console.log('Message updated:', e.message);
});
use BaksDev\Support\Rules\ValidSupportMessage;
$request->validate([
'subject' => ['required', 'string', new ValidSupportMessage],
]);
Database Conflicts:
support_messages).php artisan migrate. Use --pretend to dry-run:
php artisan migrate --pretend
Undocumented Dependencies:
baks-dev/support-answer may introduce hidden dependencies (e.g., Laravel Nova, Spatie packages).composer why baks-dev/support-answer to inspect dependencies.Queue Stuck Jobs:
failed_jobs table if queue workers fail.php artisan queue:retry all
Real-Time Disconnects:
config/broadcasting.php is set up for Pusher/Laravel WebSockets.PHP 8.4+ Features:
laravel/framework:^10.0 and PHP 8.4+.Enable Debug Logging:
// In config/support.php
'logging' => [
'enabled' => true,
'channel' => 'single', // or 'stack'
],
storage/logs/laravel.log for errors.SQL Debugging:
DB::enableQueryLog();
$message = Support::message()->send();
dd(DB::getQueryLog());
Event Debugging:
EventServiceProvider:
public function boot()
{
if (app()->environment('local')) {
$this->listenForAllEvents();
}
}
Queue Debugging:
tail -f storage/logs/laravel-queue.log
Custom Message Types:
SupportMessage model:
namespace App\Models;
use BaksDev\Support\Models\SupportMessage;
class SlackMessage extends SupportMessage
{
protected $channel = 'slack';
}
Override Services:
AppServiceProvider:
public function register()
{
$this->app->bind(
\BaksDev\Support\Contracts\MessageRepository::class,
\App\Repositories\CustomMessageRepository::class
);
}
Add Custom Fields:
// In AppServiceProvider
SupportMessage::morphMap([
'custom_field' => \App\Models\CustomField::class,
]);
Modify Notifications:
// In config/support.php
'notifications' => [
'channel' => 'mail', // or 'slack', 'database'
],
Queue Drivers:
database; ensure config/queue.php is configured for your driver (e.g., Redis).Broadcasting:
config/broadcasting.php to be set up for Pusher or Laravel WebSockets.Timezones:
config/support.php:
'timezone' => 'America/New_York',
Rate Limiting:
config/support.php for limits (e.g., max_messages_per_minute).Eager Loading:
$messages = SupportMessage::with('answers', 'agent')->get();
Caching:
$messages = Cache::remember('support_messages', 60, function () {
return SupportMessage::latest()->limit
How can I help you explore Laravel packages today?