Laravel 如何在会话 Laravel 中存储额外的数据/值
Posted
技术标签:
【中文标题】Laravel 如何在会话 Laravel 中存储额外的数据/值【英文标题】:Laravel How to store extra data/value in session Laravel 【发布时间】:2016-10-02 12:15:00 【问题描述】:我在 laravel 登录中使用默认 auth()(电子邮件和密码) 现在我尝试在(年龄或城市)等文本字段中获取用户的输入
现在我想在我的会话中存储(年龄/城市)。
帮帮我
【问题讨论】:
为什么要在会话中存储年龄?为什么不在需要时从身份验证用户那里提取它? 当我单击登录按钮或成功登录时,有什么方法可以将我的文本字段值存储在会话中。 ? 我已经发布了正确方法的答案 【参考方案1】:你可以使用
Session::put('key', 'value');
从会话中获取密钥
Session::get('key');
您可以使用session()
辅助函数作为@Alexey Mezenin 答案。
Laravel Session Documentation
【讨论】:
但是我必须在哪里写。我是 laravel 的新手 您是否在登录表单中添加了年龄/城市? 是的,我在登录表单中添加了这个 您需要在AuthController
中覆盖postLogin()
,请参阅此***.com/questions/30656113/laravel5-custom-login 它可能会对您有所帮助。
不,我不想那样做。当我单击登录按钮或成功登录时,有什么方法可以将我的文本字段值存储在会话中。 ?【参考方案2】:
你可以使用session()
助手:
session('age', 18); // saves age into session
$age = session('age')`; // gets age from session
更新
如果您想在用户注册后保存年龄和城市,您应该将此数据存储在数据库中,而不是会话中。您可以在app\Http\Controllers\Auth\AuthController.php
的create
方法中添加一些文件
【讨论】:
但是我必须在哪里写。我是 laravel 的新手 随心所欲:控制器的方法、刀片模板、中间件等。这取决于您要做什么。 Alexey 我在获取授权值并检查登录时需要此值。 laravel 中哪个文件检查用户和密码是否匹配? @KevalGarala,请看我回答的更新部分 当我单击登录按钮或成功登录时,有什么方法可以将我的文本字段值存储在会话中。 ?【参考方案3】:好的,让我来启发你。如果您想将其存储在会话中,请这样做。
session('country', $user->country); // save
$country = session('country')`; // retrieve
但这不是我们在类似 Laravel 的框架中所做的方式,它使用模型
每次刷新页面时,一旦用户通过身份验证,应用程序就会在数据库用户表中查找用户是否存在于表中。经过身份验证的用户模型也是用户模型。所以通过它我们可以提取任何列。首先是向 User class(Model) $fillable 数组添加额外的字段。 所以它看起来像这样。
User.php
protected $fillable = ['username', 'password', 'remember_token', 'country'];
所以在任何地方使用用户名和密码登录后,只需使用 Request 类或 Auth 门面。不太推荐外墙,所以在这里为了你的好,作为一个新的,我只想说如何使用请求。假设您想在 TestController.php 中检索您的 Authenticated 用户国家/地区,这就是它在方法中的使用方式。
TestController.php
use Illuminate\Http\Request;
public function testMethod(Request $request)
$someCountry = $request->user()->country; //gets the logged in user country
dd($someCountry); //dd is die and dump, could be used for debugging purposes like var_dump() method
【讨论】:
非常真实。但我不想将国家/地区存储在数据库中。【参考方案4】:使用请求
公共函数 ControllerName (Request $request)
$request->session()->put('session_age', $age);
获取 session_age
$get_session_age = $request->session()->get('session_age');
使用会话
public function ControllerName ()
Session::put('age',$age);
获取会话
$session_age = Session::get('age');
不要忘记在你的控制器中定义会话或请求!!!
use App\Http\Requests;
use Session;
【讨论】:
【参考方案5】:要在控制器中使用会话,您需要首先在控制器中包含会话
use Session;
之后在会话中存储数据。有几种方法可以做到这一点。我更喜欢这个(在控制器中)
session()->put('key',$value);
要在视图中显示会话数据,您可以这样做
@if(Session::has('key'))
I'v got session data
@else
I don't have session data
@endif
要在控制器中获取会话数据,您可以这样做
session()->get('key')
//or
session()->get('key','defaul_value_if_session_dont_exist')
当您在会话中处理完数据后,您可以像这样删除它(在控制器中)
session()->forget('key');
所有这些 session 的基本用法都在 Laravel 官方文档 here 中有详细记录。
希望对你有帮助
【讨论】:
以上是关于Laravel 如何在会话 Laravel 中存储额外的数据/值的主要内容,如果未能解决你的问题,请参考以下文章