Laravel全局变量仅在用户前缀中

时间:2019-03-12 11:41:13

标签: php laravel

我尝试在app/providers/AppServiceProvider.php中创建全局变量。
我想在前缀为webiste / user时返回userID,我尝试转储,但结果为空

use Auth;
public function boot()
{
  dump(@Auth::guard('users')->user()->id); //Null
}

2 个答案:

答案 0 :(得分:1)

您无法在AppServiceProvider的启动方法内访问auth用户,该方法在身份验证机制之前被调用。

您可以做的是创建一个ViewComposer并将变量传递给所需的任何视图。

首先创建一个服务提供商,让我们说ComposerServiceProvider,您可以使用php artisan make:provider ComposerServiceProvider来生成一个。 *不要忘记在您的config / app.php文件中注册提供商,并使用以下代码

namespace App\Providers;

use Illuminate\Support\ServiceProvider;
use Illuminate\Contracts\View\Factory as ViewFactory;

class ComposerServiceProvider extends ServiceProvider
{
    public function boot(ViewFactory $view)
    {
        $view->composer('*', 'App\Http\ViewComposers\GlobalComposer');
    }

    public function register()
    {
        //
    }
}

然后使用下面的代码创建一个GlobalComposer.php类文件

namespace App\Http\ViewComposers;

use Illuminate\Support\Facades\Auth;
use Illuminate\Contracts\View\View;

class GlobalComposer
{
    /**
     * Bind data to the view.
     *
     * @param  View  $view
     * @return void
     */
    public function compose(View $view)
    {
       $view->with('user', Auth::user());
    }
}

现在,服务提供商的引导方法上的星号表示“所有视图”,这意味着对于GlobalComposer将采取的所有项目视图。您可以将星号替换为所需的任意视图,也可以使用一系列视图,例如['auth/login', 'auth/register']

接下来,在compose方法内的GlobalComposer文件中,“组合”要在与Composer绑定的视图上传递的变量。

还要检查Laravel doc

答案 1 :(得分:0)

根据这些评论,我认为可以通过在api.php文件中添加经过身份验证的新路由来简单地解决您的问题。

尝试这种方法:

Route::middleware('auth:api')->get('/webiste/user', function (Request $request) {
    return $request->user()->id;
});