Dmitry
Dmitry

Reputation: 132

Standalone Laravel queue does not work

I am trying to use Laravel queue package outside of Laravel with the database driver, but I got an error with resolving namespaces.

Value of $concrete is 'db'.

$reflector = new ReflectionClass($concrete);

Exception message:

Fatal error: Uncaught exception 'ReflectionException' with message 'Class db does not exist' in ..vendor\illuminate\container\Container.php on line 736
ReflectionException: Class db does not exist in ..vendor\illuminate\container\Container.php on line 736

I am using the illuminate DB package also, and it is working fine, but this one throws exception.

Upvotes: 1

Views: 2078

Answers (1)

Dmitry
Dmitry

Reputation: 132

Need resolve DB connection manually and add this connection to Queue manager

Grab mysql connection from DB manager:

$connection = Capsule::schema()->getConnection();
$container = new Container();

Grab Queue manager instance:

$manager = $queue->getQueueManager();

Resolve connection:

$resolver = new \Illuminate\Database\ConnectionResolver(['default' => $connection]);

Add connection to Queue manager:

$manager->addConnector('database', function () use ($resolver) {
    return new DatabaseConnector($resolver);
});

Done!

Also need add Illuminate Encryptionn package

Complete code:

<?php
/**
 * Created by PhpStorm.
 * User: Dmitry
 * Date: 05.08.2015
 * Time: 19:32
 */

require_once "../vendor/autoload.php";
require_once '../db/db_inc.php'; // DB Capsule config

use Illuminate\Container\Container;
use Illuminate\Queue\Capsule\Manager as Queue;
use Illuminate\Database\Capsule\Manager as Capsule;
use Illuminate\Queue\Connectors\DatabaseConnector;

$connection = Capsule::schema()->getConnection();

$queue = new Queue();

$queue->addConnection([
    'driver'    => 'database',
    'table'     => 'jobs', // Required for database connection
    'connection' => 'default',
    'host'      => 'localhost',
    'queue' => 'default',
]);

$queue->getContainer()->bind('encrypter', function() {
    return new \Illuminate\Encryption\Encrypter('1111111111111111');
});
$queue->getContainer()->bind('request', function() {
    return new \Illuminate\Http\Request();
});

$manager = $queue->getQueueManager();
$resolver = new \Illuminate\Database\ConnectionResolver(['default' => $connection]);

$manager->addConnector('database', function () use ($resolver) {
    return new DatabaseConnector($resolver);
});

$queue->setAsGlobal();

Queue::push('SomeJobClass', ['parameters']);

Upvotes: 2

Related Questions