Inspired from https://github.com/agungsugiarto/codeigniter4-eloquent
Include this package via Composer:
composer require masrodie/codeigniter4-queue
Add redis config in .env
REDIS_HOST=localhost
REDIS_CLIENT=predis
REDIS_PASSWORD=null
REDIS_PORT=6379
REDIS_SCHEME=tcp
REDIS_DB=0
Open App\Controllers\BaseController.php
add $this->queue = service('queue');
on function initController
//--------------------------------------------------------------------
// Preload any models, libraries, etc, here.
//--------------------------------------------------------------------
// E.g.:
// $this->session = \Config\Services::session();
$this->queue = service('queue');;
Example job
<?php
namespace App\Jobs;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
class SendEmail implements ShouldQueue
{
use InteractsWithQueue, Queueable, SerializesModels;
public function fire($e, $payload) {
$this->onQueue('processing');
echo "FIRE\n";
$email = \Config\Services::email();
$config = [
'protocol' => getenv('EMAIL_PROTOCOL'),
'SMTPUser' => getenv('EMAIL_SMTP_USER'),
'SMTPPass' => getenv('EMAIL_SMTP_PASS'),
'SMTPHost' => getenv('EMAIL_SMTP_HOST'),
'SMTPPort' => getenv('EMAIL_SMTP_PORT'),
'SMTPCrypto' => 'ssl',
'mailType' => 'html',
];
$email->initialize($config);
$email->setFrom('email@example.com', 'John Doe');
$email->setTo($payload['to']);
$email->setSubject('Hello');
$email->setMessage('Hello email');
$email->send();
$e->delete();
}
}
<?php
namespace App\Controllers;
class Home extends BaseController
{
public function index()
{
$this->queue->push('\App\Jobs\SendEmail', ['to' => 'target@example.com']);
}
}
php spark queue:work
This package is free software distributed under the terms of the MIT license.