Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Laravel-在创建和更新时向数据库发送ip_Php_Laravel - Fatal编程技术网

Php Laravel-在创建和更新时向数据库发送ip

Php Laravel-在创建和更新时向数据库发送ip,php,laravel,Php,Laravel,所以我试图在两个事件发生时发送一个用户的ip地址 为用户创建帐户时 每当用户请求页面时,请求检查ip是否相同,如果不相同,则更新 所以我知道如何更新和获取ip地址,但是,我不想复制和粘贴两段代码以获得相同的结果。。。。所以我要问的是,当用户加载网站后,我如何获取IP,将其存储在全局变量中,然后在我需要的任何地方使用该变量,例如,当用户创建帐户时,以及当过滤器检查IP是否相同时 因此,我尝试将其添加到HomeController构造函数中,但UserController找不到该变量,我可能知道

所以我试图在两个事件发生时发送一个用户的ip地址

  • 为用户创建帐户时
  • 每当用户请求页面时,请求检查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
                ]
        );
    }

});

雄辩引发多个事件,您可以聆听它们。
您想听到的是每次创建或更新模型(保存到数据库)时触发的
保存
事件。
下面是你如何做到这一点的

雄辩者试图保存模型并触发
保存
事件。由于您侦听了此事件,因此您将获得模型的实例,该实例将在此时保存为函数参数。现在您可以在那里设置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();

        // ...
    }

});