如何以及在哪里设置会话变量(如果可能的话,一次)

时间:2019-06-12 11:27:33

标签: php laravel

我(正在学习Laravel并)基于Laravel 5.8建立博客。现在,我已经将一些假用户植入数据库以进行测试。由于用户是随机的,因此我想在刀片模板(我的布局模板)中显示用户的用户名。

我所做的事情似乎是错误的。我已经在 routes / web.php 文件中设置了会话变量:

Use App\User;
session(['user' => User::first()]);
session(['user_id' => User::first()->id]);

Route::get('/', 'PostController@index');

在我的刀片文件中访问它们:

<h2 class="subtitle">
  My self-made blog with Laravel (Login: {{ Session::get('user')->email }} )
</h2>

起初它运行良好,尽管我不确定这是否是正确的方法。但是现在我克隆了我的项目并尝试迁移数据库(在一个空数据库中),我遇到了几个错误:

  

laravel.users表不存在。

所以我发现,在我的route / web.php文件的那个位置,无法基于数据库值设置会话变量。

我在哪里或如何设置这些会话变量,这样它将只设置一次变量(如果可能)而不会出现空数据库问题?

谢谢。

2 个答案:

答案 0 :(得分:2)

您可以使用Laravel Auth::loginUsingId(1);,它将按您指定的用户ID登录用户。在这种情况下,您无需在会话中设置详细信息。

作为参考,您可以查看here

但是,如果您想使用会话,那么Middlewares是执行此类操作的最佳位置。

您只需要创建新的中间件并在此处添加代码即可。之后,您可以将此中间件添加到要在其上使用它的那些路由。

答案 1 :(得分:0)

web.php路由文件始终由Laravel加载,即使在运行迁移时也是如此。因此,当您尝试迁移应用程序时,它正在尝试从web.php文件中的数据库中加载第一个用户。而且由于用户表尚不存在,您将收到一个SQL错误。

确实不应在此处放置此代码,而应该看看middelwares

最好使用Laravel的built-in authentication functionality。这为您提供了许多功能,可以操纵和获取当前登录的用户。