所以我在两个事件发生时尝试发送用户的IP地址
所以我知道如何更新并获取IP地址,但是,我不想复制和粘贴两段代码两次以获得相同的结果....所以我问的是,如何一旦用户加载网站,我可以获取IP,将其存储在全局(?)变量中,然后在我需要的任何地方使用该变量,例如,当用户创建帐户时,以及过滤器检查是否ip是否相同。
因为我试图将它添加到我的HomeController构造函数中,但UserController无法找到变量,我可能知道原因。所以这是代码。
UserController我需要它:
public function createUser()
{
$newUser = new User;
$newUser->username = $username;
// get ip address
$newUser->ip_address = $userIpAddress;
$newUser->save();
if (!Auth::check()) {
Auth::login($newUser);
} else {
return View::make('home');
}
return Redirect::action('HomeController@showHome');
}
过滤我检查它是否不同的地方
Route::filter('checkUserFilter', function()
{
$userIpAddress = Request::getClientIp();
if (Auth::guest()){
return Redirect::action('UserController@createUser');
} else {
$user = Auth::user();
return View::make('home',
[ 'user' => $user,
'userName' => $user->username,
'userId' => $user->id,
'userPass' => $user->password
]
);
}
});
答案 0 :(得分:1)
Eloquent发射多个事件,你可以听取它们
你想要的是听每次创建或更新模型(保存到数据库)时触发的saving
事件。
这是你如何做到这一点。
Eloquent尝试保存模型并触发saving
事件。由于您收听此事件,因此您将获得当时正在保存的模型实例作为函数参数。现在您可以在那里设置IP地址(或任何其他属性)
// app/models/User.php
class User extends Eloquent
{
/**
* Listen for save event
*/
protected static function boot()
{
parent::boot();
static::saving(function($model)
{
$model->ip = \Request::getClientIp();
});
}
}
现在,路线过滤器
由于您在事件侦听器中自动设置了属性,因此调用update
方法就足够了。
Route::filter('checkUserFilter', function()
{
if (Auth::guest()) {
// ...
} else {
$user = Auth::user();
$user->ip = Request::getClientIp();
$user->update();
// ...
}
});