0

我的会话配置文件说要使用 memcached,但所有工匠命令都在加载“数组”驱动程序。我正在用 Ratchet 编写一个 Web 套接字应用程序,需要连接到 Memcached 以获取用户的会话信息,但似乎忽略了我的配置。

Laravel 在哪里以及如何确定哪些会话驱动程序用于 Artisan 命令?

4

2 回答 2

2

如果在控制台中运行,Illuminate\Support\ServiceProvider\SessionServiceProvider::setupDefaultDriver()Laravel 会将会话驱动程序设置为数组。
您可以通过注册您的自定义服务提供商轻松地覆盖它。创建自定义服务提供者,扩展默认会话服务提供者并覆盖方法setupDefaultDriver)。这是我的自定义服务提供商,例如:

<?php namespace App\Console;

use Illuminate\Session\SessionServiceProvider as DefaultSessionProvider;

class SessionServiceProvider extends DefaultSessionProvider
{
    protected function setupDefaultDriver() {}
}

然后打开config/app.php并替换'Illuminate\Session\SessionServiceProvider''App\Console\SessionServiceProvider'.

现在 artisan 也将使用与 Laravel 应用程序相同的会话存储。

由于您尝试将会话附加到 Ratchet,因此您可以直接将此会话实例注入 Ratchet 应用程序:

$session = new \Ratchet\Session\SessionProvider(
    new MyCustomRatchetApp(),
    $this->getLaravel()['session.store']
);

$server = new \Ratchet\App('localhost');
$server->route('/sessDemo', $session);
$server->run();
于 2014-09-05T07:40:25.567 回答
0

Gufran 发布了一个很好的答案,但另一个解决方案不涉及更换服务提供商,它只是在您的工匠命令(或测试)中手动设置默认驱动程序。

像这样:Session::setDefaultDriver('memcached');。您可以对缓存执行相同的操作:Cache::setDefaultDriver('memcached');. 当然,您在执行任何其他命令之前执行此操作,这样它就不会开始使用数组。

如果需要,可以手动输入连接信息:Config::set('cache.memcached', array(array('host' => '127.0.0.1', 'port' => 12345, 'weight' => 100)));

于 2014-11-24T16:48:15.633 回答