私のセッション構成ファイルは memcached を使用するように指示していますが、すべての職人のコマンドは代わりに「アレイ」ドライバーをロードしています。Ratchet を使用して Web ソケット アプリケーションを作成しており、ユーザーのセッション情報を取得するために Memcached に接続する必要がありますが、設定を無視しているようです。
LaravelはArtisanコマンドに使用するセッションドライバーをどこでどのように決定しますか?
LaravelによるとIlluminate\Support\ServiceProvider\SessionServiceProvider::setupDefaultDriver()
、コンソールで実行している場合、セッションドライバーを配列に設定します。
カスタム サービス プロバイダーを登録することで、これを簡単にオーバーライドできます。カスタム サービス プロバイダーを作成し、デフォルトのセッション サービス プロバイダーを拡張して、メソッドをオーバーライドします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: についても同じことができますCache::setDefaultDriver('memcached');
。もちろん、他のコマンドを実行する前にこれを実行して、配列の使用を開始しないようにします。
必要に応じて、接続情報を手動で入力できます。Config::set('cache.memcached', array(array('host' => '127.0.0.1', 'port' => 12345, 'weight' => 100)));