Laravel的Artisan从哪里获得会话配置信息?

时间:2014-08-26 16:18:07

标签: session caching laravel memcached ratchet

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

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

2 个答案:

答案 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)));