Php Laravel-在创建和更新时向数据库发送ip
所以我试图在两个事件发生时发送一个用户的ip地址Php Laravel-在创建和更新时向数据库发送ip,php,laravel,Php,Laravel,所以我试图在两个事件发生时发送一个用户的ip地址 为用户创建帐户时 每当用户请求页面时,请求检查ip是否相同,如果不相同,则更新 所以我知道如何更新和获取ip地址,但是,我不想复制和粘贴两段代码以获得相同的结果。。。。所以我要问的是,当用户加载网站后,我如何获取IP,将其存储在全局变量中,然后在我需要的任何地方使用该变量,例如,当用户创建帐户时,以及当过滤器检查IP是否相同时 因此,我尝试将其添加到HomeController构造函数中,但UserController找不到该变量,我可能知道
- 为用户创建帐户时
- 每当用户请求页面时,请求检查ip是否相同,如果不相同,则更新
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
]
);
}
});
雄辩引发多个事件,您可以聆听它们。
您想听到的是每次创建或更新模型(保存到数据库)时触发的
保存事件。
下面是你如何做到这一点的
雄辩者试图保存模型并触发保存
事件。由于您侦听了此事件,因此您将获得模型的实例,该实例将在此时保存为函数参数。现在您可以在那里设置IP地址(或任何其他属性)
现在,路由筛选器。
由于您在事件侦听器中设置了automaticaly属性,因此调用update
方法就足够了
Route::filter('checkUserFilter', function()
{
if (Auth::guest()) {
// ...
} else {
$user = Auth::user();
$user->ip = Request::getClientIp();
$user->update();
// ...
}
});
哦,我还在努力弄明白拉威尔,我只掌握了控制器和路由器。。。。。所以模型将是另一个需要学习的东西:)我看到Laravel已经有了一个User.php“模型”。。。。我会坚持你在里面写的代码吗?只要把代码坚持到现有的models/User.php
文件中,你就可以开始了;)另外,我对答案做了一点修改,所以现在很清楚了,代码属于哪里。看了这个之后,感觉我的createUser方法是错误的。有没有更好的办法?
Route::filter('checkUserFilter', function()
{
if (Auth::guest()) {
// ...
} else {
$user = Auth::user();
$user->ip = Request::getClientIp();
$user->update();
// ...
}
});