39

このようにlaravelを使用してセッションに変数を設定したい

Session::set('variableName')=$value;

しかし、問題は、このコードをどこに置くべきかわからないことです.1回だけ設定したいからです(ゲストがホームページまたは他のページにアクセスしたとき)? 主なアイデアは、グローバル変数を使用してすべてのアプリケーション コントローラーで使用することです。構成変数に関連することについて聞いたことがありますが、構成変数を使用するのが良いアイデアなのか、それともセッションのみを使用するのが良いのかわかりません。ありがとう

4

10 に答える 10

26

あなたの質問は最終的にこれに要約できると思います:

アプリケーションでグローバルにアクセスできる有効期間の長い値はどこで設定できますか?

明らかな答えは、依存するということです。それが依存するのは、いくつかの要因です。

  • 価値は変わるのでしょうか、それともすべての人にとって同じになるのでしょうか?
  • 長寿とは具体的にどのくらいの期間ですか?(永遠? 1 日? 1 回のブラウジング「セッション」?)

設定

値が誰にとっても同じであり、めったに変更されない場合、おそらくそれを配置するのに最適な場所は、設定ファイルの下app/configのどこかにあります。たとえば、次のようになりますapp/config/companyname.php

<?php
return [
    'somevalue' => 10,
];

アプリケーションのどこからでもこの値にアクセスできます。Config::get('companyname.somevalue')

セッション

保存しようとしている値がユーザーごとに異なる場合、それを配置する最も論理的な場所は ですSession。これはあなたの質問で言及しているものですが、間違った構文を使用しています。Session に変数を格納する正しい構文は次のとおりです。

Session::put('somekey', 'somevalue');

後で取得するための正しい構文は次のとおりです。

Session::get('somekey');

これらの操作をいつ実行するかは、あなた次第です。Laravel 4.x の場合はルート フィルターを選択し、 Laravel 5 を使用する場合はミドルウェアを選択します。以下は、別のクラスを利用して実際に値を取得するルート フィルターの使用例です。

// File: ValueMaker.php (saved in some folder that can be autoloaded)
class ValueMaker
{
    public function makeValue()
    {
        return 42;
    }
}

// File: app/filters.php is probably the best place
Route::filter('set_value', function() {
    $valueMaker = app()->make('ValueMaker');
    Session::put('somevalue', $valueMaker->makeValue());
});

// File: app/routes.php
Route::group(['before' => 'set_value'], function() {
   // Value has already been 'made' by this point. 
   return View::make('view')
       ->with('value', Session::get('somevalue'))
   ;
});
于 2015-02-09T19:59:44.683 に答える