我尝试使用 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'));
`
答案 0 :(得分:2)
如果你想要执行某些东西,你应该使用laravel 5中间件。
1.- php artisan make:middleware 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.-现在您的路线功能/控制器中有您想要的值,您可以将其与其他数据一起传递给视图。
答案 1 :(得分:1)
你必须定义你的路线,否则它将不起作用
Route::get('/testauth', function()
{
var_dump(Auth::user());
// your code here
});
现在点击'testauth'路线。它应该工作。
答案 2 :(得分:1)
您无法在路由模型绑定中访问经过身份验证的用户,因为身份验证中间件尚未运行。请参见discussion thread,其中提出了一些解决方法。
答案 3 :(得分:0)
您必须确保您的用户已通过身份验证
$common_variable=Auth::check() ?App\MyModel::where('site_id',Auth::user()->id)->count() : 0;
当您未经过身份验证时,Auth :: user()将始终返回null,并且您在null对象上引用id,从而为您提供错误
答案 4 :(得分:0)
这就是我这样做的方式。我想将视图限制为所请求对象的所有者,在我的例子中是“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。