I’ve been wanting to use iron.io queues with Illuminate/Queue and despite claiming otherwise in its readme, this doesn’t actually work with the provided example code – instead simply resulting in
Fatal error: Uncaught exception ‘ReflectionException’ with message ‘Class encrypter does not exist’ in /vendor/illuminate/container/Illuminate/Container/Container.php on line 485
I’ve tried numerous times to get a fix from Taylor and ignored/given the runaround every time. I even submitted a pull request with the solution but it was closed without merge or explanation.
Anyway, to ACTUALLY use iron.io with illuminate/queue outside of laravel, the following lines of code are required:
$queue->getContainer()->bind('encrypter', function() {
return new Illuminate\Encryption\Encrypter('foobar');
});
$queue->getContainer()->bind('request', function() {
return new Illuminate\Http\Request();
});
Drop them below $queue->addConnection and you’re good to go. Here’s complete example file:
require 'vendor/autoload.php';
use Illuminate\Queue\Capsule\Manager as Queue;
use Carbon\Carbon;
$queue = new Queue;
$queue->addConnection(require __DIR__.'/config/queue.php');
// Make this Capsule instance available globally via static methods... (optional)
$queue->setAsGlobal();
$date = Carbon::now()->addMinutes(2);
$queue->getContainer()->bind('encrypter', function() {
return new Illuminate\Encryption\Encrypter('foobar');
});
$queue->getContainer()->bind('request', function() {
return new Illuminate\Http\Request();
});
Queue::push($date, 'EmailTest', array('foo' => 'bar'));
class EmailTest
{
public function fire($job, $data)
{
mail('my@email.com', 'hiya', $data['foo']);
}
}