我的会话配置文件说使用memcached,但所有工匠命令都在加载“数组”驱动程序。我正在使用Ratchet编写一个Web套接字应用程序,需要连接到Memcached以获取用户的会话信息,但似乎忽略了我的配置。
Laravel在哪里以及如何确定用于Artisan命令的会话驱动程序?
答案 0 :(得分: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 app相同的会话存储。
由于您尝试将会话附加到Ratchet,您可以直接将此会话实例注入Ratchet应用程序:
$session = new \Ratchet\Session\SessionProvider(
new MyCustomRatchetApp(),
$this->getLaravel()['session.store']
);
$server = new \Ratchet\App('localhost');
$server->route('/sessDemo', $session);
$server->run();
答案 1 :(得分:0)
Gufran发布了一个很好的答案,但另一个解决方案不涉及交换服务提供商,它只是在您的工匠命令(或测试)中手动设置默认驱动程序。
像这样:Session::setDefaultDriver('memcached');
。您可以对缓存执行相同的操作:Cache::setDefaultDriver('memcached');
。当然,在执行任何其他命令之前,请执行此操作,以便它不会开始使用该数组。
如果需要,您可以手动输入连接信息:Config::set('cache.memcached', array(array('host' => '127.0.0.1', 'port' => 12345, 'weight' => 100)));