Reputation: 132
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
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