laravel - Laravel - 如何在应用服务提供商中获取用户 ID
问题描述
我尝试在我的应用服务提供商中获取用户 ID,但我收到一个错误,显示 ErrorException: Trying to get property of non-object,知道如何获取用户 ID 吗?
应用服务提供者:
<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use App\Project;
use Log;
use Auth;
class AppServiceProvider extends ServiceProvider
{
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
$userid = Auth::user()->id;
Log::info('userid :', [$userid]);
$project = Project::where('user_id',Auth::user()->id)->count();
}
}
错误:
local.ERROR: ErrorException: Trying to get property of non-object in C:\wamp64\www\test\app\Providers\AppServiceProvider.php:20 Stack trace: #0 C:\wamp64\www\test\app\Providers\AppServiceProvider.php(20): Illuminate\Foundation\Bootstrap\HandleExceptions->handleError(8, 'Trying to get p...', 'C:\\wamp64\\www\\f...', 20, Array) #1 [internal function]: App\Providers\AppServiceProvider->boot() #2 C:\wamp64\www\test\vendor\laravel\framework\src\Illuminate\Container\Container.php(507): call_user_func_array(Array, Array) #3 C:\wamp64\www\test\vendor\laravel\framework\src\Illuminate\Foundation\Application.php(734): Illuminate\Container\Container->call(Array) #4 C:\wamp64\www\test\vendor\laravel\framework\src\Illuminate\Foundation\Application.php(717): Illuminate\Foundation\Application->bootProvider(Object(App\Providers\AppServiceProvider)) #5 [internal function]: Illuminate\Foundation\Application->Illuminate\Foundation\{closure}(Object(App\Providers\AppServiceProvider), 19) #6 C:\wamp64\www\test\vendor\laravel\framework\src\Illuminate\Foundation\Application.php(718): array_walk(Array, Object(Closure)) #7 C:\wamp64\www\test\vendor\laravel\framework\src\Illuminate\Foundation\Bootstrap\BootProviders.php(17): Illuminate\Foundation\Application->boot() #8 C:\wamp64\www\test\vendor\laravel\framework\src\Illuminate\Foundation\Application.php(203): Illuminate\Foundation\Bootstrap\BootProviders->bootstrap(Object(Illuminate\Foundation\Application)) #9 C:\wamp64\www\test\vendor\laravel\framework\src\Illuminate\Foundation\Http\Kernel.php(222): Illuminate\Foundation\Application->bootstrapWith(Array) #10 C:\wamp64\www\test\vendor\laravel\framework\src\Illuminate\Foundation\Http\Kernel.php(117): Illuminate\Foundation\Http\Kernel->bootstrap() #11 C:\wamp64\www\test\vendor\laravel\framework\src\Illuminate\Foundation\Http\Kernel.php(87): Illuminate\Foundation\Http\Kernel->sendRequestThroughRouter(Object(Illuminate\Http\Request)) #12 C:\wamp64
解决方案
用于View::composer('*',)
在所有视图中使用 Auth。
use Illuminate\Support\Facades\View;
.........
public function boot()
{
View::composer('*', function($view)
{
if (Auth::check()){
$project = Project::where('user_id',Auth::id() )->count();
}
});
您可以将其理解为在视图渲染之前进行身份验证之后,您需要在这些之间进行检查,而不是之前。
推荐阅读
- c++ - 如何改进我的代码以生成安全的随机数?
- javascript - 尝试在对象上调用 get 时 Javascript 不会引发错误
- ruby-on-rails - 如何验证从一个 Rails 应用程序发送到另一个应用程序的请求
- sql - SQL查询百分比
- ms-access - 按下按钮时如何使进程运行?
- java - 如何传入/使用 .Class/Object 作为方法参数
- excel - 操作 CSV 文件:增加单元格坐标/位置
- machine-learning - `BCEWithLogitsLoss` 和 Pytorch 中的训练类数据集不平衡
- python-3.x - Python 列表格式化和更新
- php - Laravel 5.6 路由组