Установить переменную сеанса в 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']);
Ты можешь попробовать
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?