Laravel, как лучше подходить для захвата посетителей Ip? - PullRequest
0 голосов
/ 29 марта 2019

Я ищу лучший поддерживаемый / безопасный подход для захвата 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 используется для сохранения запроса от посетителей в БДи отправляя почту, я могу собрать IP и передать его по запросу посетителя, но моя цель - захватить IP, как только посетитель откроет мой веб-сайт или сделает запрос на проверку связи.

Ответы [ 2 ]

2 голосов
/ 29 марта 2019

Даже если ваш код работает на самом деле, я бы не рекомендовал использовать эту технику.Вот что вы должны сделать.

Определите класс, который используется только для сохранения 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);
0 голосов
/ 29 марта 2019

добавить это в свой контроллер ...

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

Для вашего случая,

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