1. Go to this page and download the library: Download darkghosthunter/laralocker library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
darkghosthunter / laralocker example snippets
namespace App\Listeners;
use App\Ticket;
use App\Events\TicketSold;
use App\Notifications\TicketAvailableNotification;
use DarkGhostHunter\Laralocker\Contracts\Lockable;
use DarkGhostHunter\Laralocker\LockerJobMiddleware;
use DarkGhostHunter\Laralocker\HandlesLockerSlot;
use Illuminate\Contracts\Queue\ShouldQueue;
use SerialGenerator\SerialGenerator;
class CreateTicket implements ShouldQueue, Lockable
{
use HandlesLockerSlot;
/**
* Get the middleware the job should pass through.
*
* @return array
*/
public function middleware()
{
return [new LockerJobMiddleware()];
}
/**
* Return the starting slot for the Jobs.
*
* @return mixed
*/
public function startFrom()
{
// Get the latest stored ticket serial key.
return Ticket::latest()->value('serial_key');
}
/**
* The next slot to check for availability.
*
* @param mixed $slot
* @return mixed
*/
public function next($slot)
{
// Ask our hypothetical generator to create a new serial from that.
return SerialGenerator::baseSerial($slot)->getNextSerial();
}
/**
* Handle the event.
*
* @param \App\Listeners\TicketSold $event
* @return void
*/
public function handle(TicketSold $event)
{
// Create a new Ticket instance with this locked slot value.
$ticket = Ticket::make([
'serial_key' => $this->slot,
]);
// Associate the Ticket to the Concert and the User
$ticket->concert()->associate($event->concert);
$ticket->user()->associate($event->user);
// Save the Ticket into the system
$ticket->save();
// Notify the user that his ticket bought is available
$event->user->notify(
new TicketAvailableNotification($ticket)
);
}
}
/**
* Use a non-default Cache repository for handling slots (optional)
*
* @return \Illuminate\Contracts\Cache\Repository
*/
public function cache()
{
return Cache::store('redis')->tag('tickets_queue');
}
/**
* Maximum Slot reservation time
*
* @var \Illuminate\Support\Carbon|int
*/
public $slotTtl = 180;
/**
* Prefix for slots reservations
*
* @var string
*/
public string $prefix = 'ticket_locking';