我的会话配置文件说要使用 memcached,但所有工匠命令都在加载“数组”驱动程序。我正在用 Ratchet 编写一个 Web 套接字应用程序,需要连接到 Memcached 以获取用户的会话信息,但似乎忽略了我的配置。
Laravel 在哪里以及如何确定哪些会话驱动程序用于 Artisan 命令?
如果在控制台中运行,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();
Gufran 发布了一个很好的答案,但另一个解决方案不涉及更换服务提供商,它只是在您的工匠命令(或测试)中手动设置默认驱动程序。
像这样:Session::setDefaultDriver('memcached');
。您可以对缓存执行相同的操作:Cache::setDefaultDriver('memcached');
. 当然,您在执行任何其他命令之前执行此操作,这样它就不会开始使用数组。
如果需要,可以手动输入连接信息:Config::set('cache.memcached', array(array('host' => '127.0.0.1', 'port' => 12345, 'weight' => 100)));