我(正在学习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文件的那个位置,无法基于数据库值设置会话变量。
我在哪里或如何设置这些会话变量,这样它将只设置一次变量(如果可能)而不会出现空数据库问题?
谢谢。
答案 0 :(得分:2)
您可以使用Laravel Auth::loginUsingId(1);
,它将按您指定的用户ID登录用户。在这种情况下,您无需在会话中设置详细信息。
作为参考,您可以查看here
但是,如果您想使用会话,那么Middlewares是执行此类操作的最佳位置。
您只需要创建新的中间件并在此处添加代码即可。之后,您可以将此中间件添加到要在其上使用它的那些路由。
答案 1 :(得分:0)
web.php
路由文件始终由Laravel加载,即使在运行迁移时也是如此。因此,当您尝试迁移应用程序时,它正在尝试从web.php
文件中的数据库中加载第一个用户。而且由于用户表尚不存在,您将收到一个SQL错误。
确实不应在此处放置此代码,而应该看看middelwares。
最好使用Laravel的built-in authentication functionality。这为您提供了许多功能,可以操纵和获取当前登录的用户。