7

Я хотел бы установить переменную в сеансе, используя Laravel таким образомУстановить переменную сессии в Laravel

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

, но проблема в том, что я не знаю, куда поместить этот код, потому что я хотел установить его один раз (когда гость просматривает домашнюю страницу или любую другую страницу)? Основная идея заключается в использовании глобальной переменной для ее использования во всех контроллерах приложений, я слышал о чем-то, связанном с переменными конфигурации, но я не уверен, будет ли хорошая идея использовать конфигурационные переменные или только сеанс? Благодаря

+1

, что является незаконным PHP. левая сторона операции присваивания не может быть выражением. 'set()' - вызов функции/метода - он может только ВОЗВРАТИТЬ значение, вы не можете присвоить ему значение. –

+0

Это очень хорошо документировано здесь: http://laravel.com/docs/5.0/session – baao

ответ

27

Правильный синтаксис для этого ...

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

Чтобы получить переменную, нужно использовать ...

Session::get('variableName'); 

Если вам нужно установить его один раз, я 'd выяснить, когда именно вы хотите, чтобы он был установлен и использовать события для этого. Например, если вы хотите установить его, когда кто-то входит в систему, вы будете использовать ...

Event::listen('auth.login', function() 
{ 
    Session::set('variableName', $value); 
}); 
+0

Скажите, пожалуйста, где мы можем использовать это событие? – Uzair

+1

в маршрутах или контроллере? – Uzair

+0

Возможно, вы захотите создать для него поставщика услуг и поместить его туда. – user3158900

13

Я думаю, ваш вопрос, в конечном счете, может быть сводились к следующему:

Где я могу установить долговечное значение, доступное глобально в моем приложении?

Очевидным ответом является то, что это зависит. От этого зависит несколько факторов:

  • Будет ли ценность когда-либо отличаться или она будет одинаковой для всех?
  • Как долго длится долго? (Навсегда? День? Один из просмотра «сессия»?)

Config

Если значение является одинаковым для всех, и редко изменится, самое лучшее место, вероятно, поместить это в конфигурации файл где-то под app/config, например app/config/companyname.php:

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

Вы можете получить это значение из любого места в приложении с помощью Config::get('companyname.somevalue')

Session

Если значение, которое вы намерены хранить будет разные для каждого пользователя , наиболее логичным местом для размещения является Session. Это то, о чем вы говорите в своем вопросе, но используете неправильный синтаксис.Правильный синтаксис для хранения переменной в сессии является:

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

Правильный синтаксис для извлечения его обратно позже есть:

Session::get('somekey'); 

Насколько когда для выполнения этих операций, что немного вам решать. Я бы, вероятно, выбрать route filter если на Laravel 4.x или Middleware при использовании 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')) 
    ; 
}); 
+0

upvote из-за hhtg :-) и хороший и всесторонний ответ. – Tschallacka

2

в Laravel 5.4

использовать этот метод:

Session::put('variableName', $value); 
Смежные вопросы