Установить переменную сеанса в laravel

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

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

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

11 ответов

Решение

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

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

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

Session::get('variableName');

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

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

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

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

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

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

конфиг

Если значение одинаково для всех и редко меняется, вероятно, лучше всего его поместить в файл конфигурации где-то под 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 или 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'))
   ;
});

В Laravel 5.6 вам нужно будет установить его как

  session(['variableName'=>$value]);

Чтобы восстановить это так же просто, как

$variableName = session('variableName')

Например, чтобы сохранить данные в сеансе, вы обычно будете использовать putметод или session помощник:

// Via a request instance...
$request->session()->put('key', 'value');

или же

// Via the global helper...
session(['key' => 'value']);

для получения элемента из сеанса вы можете использовать get:

$value = $request->session()->get('key', 'default value');

или глобальный session помощник:

$value = session('key', 'default value');

Чтобы определить, присутствует ли элемент в сеансе, вы можете использовать has метод:

if ($request->session()->has('users')) {
//
}

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

public function functionName(Request $request)  {
       //
}

Обратите внимание на "(Request $request)", теперь установите сессию так:

$request->session()->put('key', 'value');

И получить сессию следующим образом:

$data = $request->session()->get('key');

Чтобы стереть сессию попробуйте это:

$request->session()->forget('key');  

или же

$request->session()->flush();

В Laravel 5.4

используйте этот метод:

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

В Laravel 6.x

// Retrieve a piece of data from the session...
$value = session('key');

// Specifying a default value...
$value = session('key', 'default');

// Store a piece of data in the session...
session(['key' => 'value']);

https://laravel.com/docs/6.x/session

Ты можешь попробовать

 Session::put('variable_Name', "Your Data Save Successfully !");  
 Session::get('variable_Name');

Чтобы установить сеанс, вы можете попробовать это:

$request->session()->put('key','value');

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

$request->session()->get('key');

Если вы хотите получить все данные сеанса:

$request->session()->all();

Если вам нужны сеансы сохранения, используйте session()->save() или Session::save()

      session(['key' => 'value']);
//or
session()->put('key', 'value');

//then
session()->save();

echo session('key');

Убедитесь, что каталог хранилища имеет разрешение на запись

      chmod -R a+rw storage/
php artisan make:controller SessionController --plain

затем

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;

class SessionController extends Controller {
   public function accessSessionData(Request $request) {
      if($request->session()->has('my_name'))
         echo $request->session()->get('my_name');
      else
         echo 'No data in the session';
   }
   public function storeSessionData(Request $request) {
      $request->session()->put('my_name','Ajay kumar');
      echo "Data has been added to session";
   }
   public function deleteSessionData(Request $request) {
      $request->session()->forget('my_name');
      echo "Data has been removed from session.";
   }
}
?>

И весь маршрут:

Route::get('session/get','SessionController@accessSessionData');
Route::get('session/set','SessionController@storeSessionData');
Route::get('session/remove','SessionController@deleteSessionData');

Дополнительная помощь: как установить сеанс в Laravel?

Другие вопросы по тегам