0

私のセッション構成ファイルは memcached を使用するように指示していますが、すべての職人のコマンドは代わりに「アレイ」ドライバーをロードしています。Ratchet を使用して Web ソケット アプリケーションを作成しており、ユーザーのセッション情報を取得するために Memcached に接続する必要がありますが、設定を無視しているようです。

LaravelはArtisanコマンドに使用するセッションドライバーをどこでどのように決定しますか?

4

2 に答える 2

2

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();
于 2014-09-05T07:40:25.567 に答える
0

Gufran は良い回答を投稿しましたが、サービス プロバイダーの交換を伴わない別の解決策は、職人のコマンド (またはテスト) でデフォルト ドライバーを手動で設定することだけです。

そのように: Session::setDefaultDriver('memcached');. cache: についても同じことができますCache::setDefaultDriver('memcached');。もちろん、他のコマンドを実行する前にこれを実行して、配列の使用を開始しないようにします。

必要に応じて、接続情報を手動で入力できます。Config::set('cache.memcached', array(array('host' => '127.0.0.1', 'port' => 12345, 'weight' => 100)));

于 2014-11-24T16:48:15.633 に答える