Laravel,捕获访客IP的最佳方法是什么?

时间:2019-03-29 12:57:02

标签: php laravel controller ip refactoring

我正在寻找最好的支持/安全方法来捕获访问者的IP地址。

目前,我可以通过以下方法保存访问者IP

进行呼叫的路由。

Route::get('/','VisitorController@multidisplay');

在多显示功能中,我正在调用另一个控制器来捕获和存储“访客IP”,例如->

 public function multidisplay()
    {   
        //calling log visitor controller
        app()->call('App\Http\Controllers\LogVisitIpController@store');


        return view('welcome')
        ->with('sliderimg', Sliderimage::all())
        ->with('postimg', PostImage::orderBy('created_at', 'desc')->take(3)->get())
        ;

    }

最后,将访问者的Ip存储在LogVisitIpController中的实际功能

public function store(Request $request)
    {
        $bla=$this->getIp();
        $myvisitor = new LogVisitIp();
        $myvisitor->visitorIp=$bla;
        $myvisitor->save();
    }

现在我有两个问题。

  1. 可以在另一个控制器中使用类似的控制器吗?

  2. 我应该使用另一种方法来捕获访问者ip     控制器?

注意:VisitorController用于将访问者的请求保存到DB中并发送邮件,我可以收集IP并从访问者的请求中传递它,但我的目的是在访问者打开我的网站或进行ping操作后立即捕获Ip请求。

2 个答案:

答案 0 :(得分:2)

即使您的代码实际可行,我也不建议您使用该技术。 这是您应该做的。

定义一个仅用于保存ips的类。您将把真正记录IP的代码移到此处。

Class VisitIpLoggerService
{
    public function storeIp(Request $request)
    {
        $myvisitor = new LogVisitIp();
        $myvisitor->visitorIp=$request->ip();
        $myvisitor->save();
    }
}

然后,您将该服务注入到控制器的函数中,然后像这样调用该函数。这样,您的代码将更易于维护。

public function multidisplay(Request $request, VisitIpLoggerService $ipLogger)
{   
    //just call the service
    $ipLogger->storeIp($request);

答案 1 :(得分:0)

将此添加到您的控制器中...

'ip_address_variable' => \Request::ip();

对于您的情况,

public function store(Request $request)
    {
        $bla=$this->getIp();
        $myvisitor = new LogVisitIp();
        $myvisitor->visitorIp=$request->ip();
        $myvisitor->save();
    }