【问题标题】:Laravel 5.1 illuminate/queue capsule error 'Class encrypter does not exist'Laravel 5.1 照明/队列胶囊错误“类加密器不存在”
【发布时间】:2015-12-26 18:56:55
【问题描述】:

我需要从 Laravel 框架外部将作业推送到队列中。找到应该使这成为可能的队列胶囊管理器:

https://github.com/illuminate/queue

根据他们的示例代码尝试以下操作:

<?php

require_once __DIR__ . '/../../bootstrap/autoload.php';

use Illuminate\Queue\Capsule\Manager as Queue;

$queue = new Queue;

$queue->addConnection([
    'driver' => 'sync',
]);

$queue->setAsGlobal();

$queue->push(function($job)
{
    echo "test!\n";
    $job->delete();
});

运行此代码会导致以下错误:

PHP Fatal error:  Uncaught exception 'ReflectionException' with message 'Class encrypter does not exist' in vendor/laravel/framework/src/Illuminate/Container/Container.php:741
Stack trace:
#0 vendor/laravel/framework/src/Illuminate/Container/Container.php(741): ReflectionClass->__construct('encrypter')
#1 vendor/laravel/framework/src/Illuminate/Container/Container.php(631): Illuminate\Container\Container->build('encrypter', Array)
#2 vendor/laravel/framework/src/Illuminate/Container/Container.php(1163): Illuminate\Container\Container->make('encrypter')
#3 vendor/laravel/framework/src/Illuminate/Queue/QueueManager.php(117): Illuminate\Container\Container->offsetGet('encrypter')
#4 vendor/laravel/framework/src/Illuminate/Queue/Capsule/Manager.php(135): Illuminate\Queue\QueueM in vendor/laravel/framework/src/Illuminate/Container/Container.php on line 741

Fatal error: Uncaught exception 'ReflectionException' with message 'Class encrypter does not exist' in vendor/laravel/framework/src/Illuminate/Container/Container.php:741
Stack trace:
#0 vendor/laravel/framework/src/Illuminate/Container/Container.php(741): ReflectionClass->__construct('encrypter')
#1 vendor/laravel/framework/src/Illuminate/Container/Container.php(631): Illuminate\Container\Container->build('encrypter', Array)
#2 vendor/laravel/framework/src/Illuminate/Container/Container.php(1163): Illuminate\Container\Container->make('encrypter')
#3 vendor/laravel/framework/src/Illuminate/Queue/QueueManager.php(117): Illuminate\Container\Container->offsetGet('encrypter')
#4 vendor/laravel/framework/src/Illuminate/Queue/Capsule/Manager.php(135): Illuminate\Queue\QueueM in vendor/laravel/framework/src/Illuminate/Container/Container.php on line 741

搜索这个主题我发现了一些说添加以下代码的东西:

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

这似乎不是一个解决方案,因为我收到以下错误:

PHP Fatal error:  Uncaught exception 'Illuminate\Contracts\Container\BindingResolutionException' with message 'Target [Illuminate\Contracts\Encryption\Encrypter] is not instantiable.' in vendor/laravel/framework/src/Illuminate/Container/Container.php:749
Stack trace:
#0 vendor/laravel/framework/src/Illuminate/Container/Container.php(631): Illuminate\Container\Container->build('Illuminate\\Cont...', Array)
#1 vendor/laravel/framework/src/Illuminate/Container/Container.php(842): Illuminate\Container\Container->make('Illuminate\\Cont...')
#2 vendor/laravel/framework/src/Illuminate/Container/Container.php(805): Illuminate\Container\Container->resolveClass(Object(ReflectionParameter))
#3 vendor/laravel/framework/src/Illuminate/Container/Container.php(776): Illuminate\Container\Container->getDependencies(Array, Array)
#4  in vendor/laravel/framework/src/Illuminate/Container/Container.php on line 749

根据Illumination/queue的文档判断,不需要绑定这些。

这发生在 laravel 5.1.27 中。有什么想法/解决方案吗?

更新:我已经在 4.2 环境中尝试过,我还必须绑定加密器类,但这样做是可行的。 (不给出不可实例化的错误)

【问题讨论】:

  • 你的自动加载器是什么样的?您如何管理依赖项?您是否在命令行中使用 composer 并 requireing 这些依赖项?看起来好像提供者没有注册,因此无法执行。您是否只是从其他目录指向 Laravel 安装?
  • @Ohgodwhy 只是标准的 laravel 自动加载,加载 vendor/autoload.php 和 cached/compiled.php。不管理任何东西,只是从一个目录指向 laravel 安装,如您在我的示例代码中所见。确实是从命令行使用的作曲家。

标签: php laravel laravel-5.1


【解决方案1】:

在玩了一会儿之后,您应该在加密器绑定之后再添加一个绑定来解决这个问题。

$queue->getContainer()->bind('Illuminate\Contracts\Encryption\Encrypter', 'encrypter');

将加密器绑定到合约。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-08
    • 2020-01-13
    • 2017-11-03
    • 2016-02-24
    • 2016-05-28
    • 2015-09-29
    • 2014-01-03
    • 2012-01-25
    相关资源
    最近更新 更多