在我的网页上有3个选项,登录,注册和注销。
如果我只想显示可用的按钮,例如如果用户插入我只想显示注销按钮,但如果用户是访客,他们需要登录和注册按钮。
现在我添加了一个提供程序来检查用户是否经过身份验证。这是我的代码。
<?php
namespace App\Providers;
use View;
use Auth;
use Illuminate\Support\ServiceProvider;
class ShareServiceProvider extends ServiceProvider
{
/**
* Bootstrap the application services.
*
* @return void
*/
public function boot()
{
echo "Provider boot check ";
var_dump(Auth::check());
if(Auth::check())
{
View::share(['loged_in' => true]);
}
else
{
View::share(['loged_in' => false]);
}
}
/**
* Register the application services.
*
* @return void
*/
public function register()
{
//
}
}
但是用户每次都显示为访客。当我在其他控制器中创建Auth :: check()时,一切正常。但我不想在每个控制器中检查它。
答案 0 :(得分:0)
我可以为您提供替代方案来解决您的问题,这可以在您的约束下工作。
您可以将其作为辅助功能,而不是将其作为服务提供商,您可以在刀片或控制器中调用它。
创建helpers.php
文件并将其放置为app/Http/helpers.php
。
然后将其添加到composer.json
数组
autoload
"autoload": {
"files": [
"app/Http/helpers.php"
],
composer dump-autoload
,之后在您的终端。
现在,在helpers.php
文件中添加以下方法:
function userLoggedIn(){
$logged_in = false;
if(Auth::check()){
$logged_in = true;
}
return $logged_in;
}
现在,您应该可以在任何控制器/刀片中使用此方法。
@if(userLoggedIn())
<p>Logged in</p>
@else
<p>Not Logged in</p>
@endif
通过这种方式,您无需承担必须执行Auth的开销:检入每个控制器,您仍然可以在项目中的任何位置使用它。