6

Using illuminate/queue outside of Laravel

Posted in PHP

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:

1
2
3
4
5
6
$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:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
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']);
	}
}
  • Tommy Marshall

    Doesn’t work it looks like, Class IlluminateQueueCapsuleManager not found.

    • flynsarmy


      require 'vendor/autoload.php';

      use IlluminateQueueCapsuleManager as Queue;
      use CarbonCarbon;

      $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 IlluminateEncryptionEncrypter('foobar');
      });
      $queue->getContainer()->;bind('request', function() {
      return new IlluminateHttpRequest();
      });
      Queue::push($date, 'EmailTest', 'foo');

      class EmailTest
      {
      public function fire($job, $data)
      {
      mail('my@email.com', 'hiya', $data['foo']);
      }
      }

      • Tommy Marshall

        Still no go.

        Code: http://laravel.io/bin/YOnRr

        Error: Fatal error: Class ‘IlluminateQueueCapsuleManager’ not found

        I am loading the vendor autoload file. This is odd indeed…

        • flynsarmy

          I don’t know what you’ve done. If you’ve composer require’d “illuminate/queue”:”4.2.*” and included vendor/autoload.php then the capsule manager will exist. You’ve obviously done something wrong.

          It’s even in his readme file.

  • Walder Frey

    Nice fix. Thanks! 🙂

  • Олександр Торош

    Thanks!