在我的网页上有三个选项,登录、注册和注销。
如果我想只显示可用的按钮,例如,如果用户登录,我只想显示注销按钮,但如果用户是客人,他们需要登录和注册按钮。
现在我添加了一个提供程序来检查用户是否已通过身份验证。这是我的密码。
<?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()时,一切都很好。但我不想在每个控制器中都检查它。
我可以为您提供一种替代方案,以在您的限制范围内实现问题的解决方案。
与其将其作为服务提供商,不如将其作为辅助功能,以便在刀片或控制器中调用。
创建一个helpers.php
文件,并将其作为app/Http/helpers.php
放置。
然后将其添加到autoload
阵列内的composer.json
中
"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:签入每个控制器的开销,并且您仍然可以在项目中任何需要的地方使用它。
资源:https://laracasts.com/discuss/channels/general-discussion/best-practices-for-custom-helpers-on-laravel-5?page=1