1. Go to this page and download the library: Download fshafiee/laravel-once 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/ */
fshafiee / laravel-once example snippets
namespace App\Jobs\Rollables;
use App\Jobs\UpdateAuthorCache;
use App\Models\Author;
use LaravelOnce\Tasks\AutoDispatchedTask;
class UpdateAuthorCacheOnce extends AutoDispatchedTask
{
public $authorId;
public function __construct(string $authorId)
{
/**
* Make sure parent::_construct() method is called.
* or else the task won't be automatically added
* to the task backlog, and you'd need to add it manually
* by resolve the service.
*/
parent::__construct();
$this->authorId = $authorId;
}
public function perform()
{
UpdateAuthorCache::revalidate($this->authorId);
/**
* You could also dispatch the job to a queue in
* order to process it asynchronously. It'll be
* dispatched only once at the end of the request.
*/
}
}
namespace App\Subscribers;
use App\Events\AuthorCreated;
use App\Events\AuthorUpdated;
use App\Events\BookCreated;
use App\Events\BookUpdated;
// ...
use App\Jobs\Rollables\UpdateAuthorCacheOnce;
class AuthorCacheSubscriber
{
/**
* Register the listeners for the subscriber.
*
* @param Dispatcher $events
*/
public function subscribe($events)
{
$events->listen(AuthorCreated::class, self::class.'@handle');
$events->listen(AuthorUpdated::class, self::class.'@handle');
$events->listen(BookCreated::class, self::class.'@handle');
$events->listen(BookUpdated::class, self::class.'@handle');
// ... the rest of the event bindings
}
public function handle($event)
{
/**
* Instead of:
* UpdateAuthorCache::revalidate($event->getAuthorId());
* We have:
*/
new UpdateAuthorCacheOnce($event->getAuthorId());
}
}
namespace App\Jobs\Rollables;
use App\Jobs\UpdateProductsCatalogue;
use LaravelOnce\Tasks\DebouncingTask;
class UpdateUsersProductsCatalogue extends DebouncingTask
{
public $userId;
public function __construct(string $userId)
{
/**
* Make sure parent::_construct() method is called.
* or else the task won't be automatically added
* to the task backlog, and you'd need to add it manually
* by resolve the service.
*/
parent::__construct();
$this->userId = $userId;
}
public function perform()
{
UpdateProductsCatalogue::forUser($this->userId);
/**
* You could also dispatch the job to a queue in
* order to process it asynchronously. It'll be
* dispatched only once at the end of the debounce
* wait time
*/
}
public function wait() : int
{
return 900;
}
}