Laravel 5:如何使用Auth::user()->;路线中的id


Laravel 5 : How to use Auth::user()->id in route

我试图使用php-Laravel框架创建一个应用程序。当我在路由文件中使用Auth::user()->id时,我遇到了错误"试图获取非对象的属性"。那么我该如何修复它呢?

这是我的路线文件

`

<?php 
/*
|--------------------------------------------------------------------------
| Application Routes
|--------------------------------------------------------------------------
|
| Here is where you can register all of the routes for an application.
| It's a breeze. Simply tell Laravel the URIs it should respond to
| and give it the controller to call when that URI is requested.
|
*/
Route::get('/', 'HomeController@index');
Route::controllers([
    'auth' => 'Auth'AuthController',
    'password' => 'Auth'PasswordController',
]);
$common_variable=App'MyModel::where('site_id',Auth::user()->id)->count();
view()->share(compact('common_variable'));

`

如果您想要执行某个东西,您应该使用laravel 5中间件。

1.php手工制作:中间件newMiddleware。

2.-通过设置中间件属性,将中间件添加到所需的所有路由中。

Route::get('test', ['before' => 'newMiddleware', function(){
    //
}]);

3.-现在以正确的方式做你想在哪里完成

$user_id = Auth::user()->id()
if($user_id){
    $variable = 'App'Model::where('site_id', '=', $user_id)
}
return $variable

4.-现在您在路由函数/控制器中有了所需的值,您可以将其与其他数据一起传递到视图。

你必须定义你的路线,否则它将无法工作

Route::get('/testauth', function()
{
   var_dump(Auth::user());
   // your code here 
});

现在进入"testauth"路线。它应该起作用。

由于身份验证中间件尚未运行,因此无法在路由模型绑定中访问经过身份验证的用户。请参阅讨论主题,其中提出了一些解决方案。

您必须确保您的用户已通过身份验证

$common_variable=Auth::check() ?App'MyModel::where('site_id',Auth::user()->id)->count() : 0;

当您未通过身份验证时,Auth::user()将始终返回null,并且您引用的是null对象上的id,这会导致错误

我就是这样做的。我想将视图限制为请求对象的所有者,在我的情况下是"API密钥"。我使用了Laravel的路由模型绑定来做这件事。

Route::model('apikeys', 'Apikey');
Route::bind('apikeys', function($value, $route) {
    return Apikey::whereSlug($value)->where('users_id', '=', Auth::user()->id)->where('approved', '=', true)->where('deleted', '=', false)->first();
});
Route::resource('apikeys', 'ApikeysController');

在这种情况下,我将传入请求的"slug"(即api密钥的友好url)的值,然后添加一个带有已验证用户ID的AND'ed where子句,approved=true,deleted=false。