我试图使用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。