Laravel geo与Torann \ GeoIP

时间:2017-12-14 03:16:56

标签: php laravel geoip

我尝试在Laravel 5.5上使用GeoIP,我有问题让它运行起来。

我想要什么

  1. 我希望 上的用户 ISO_CODE 访问我网站上的任何页面 。因此,我可以在我的图表中将其用作访问者所在国家/地区。
  2. 问题

    1. 我的方法(下面提供)
    2. 我无法获得iso_code
    3. 如何在我的网站上获取数据而不提供静态网址?
    4. 我使用Charts

      的方法
      //Header
      use GeoIP as GeoIP;
      
      class ChartController extends Controller
      {
      //.....
      
      //Method
      public function index()
          {
            //rest of my codes
            $data = geoip()->getLocation();
            $chart3 = Charts::create('geo', 'highcharts')
                   ->title('My nice chart')
                   ->elementLabel('My nice label')
                   ->labels($data->pluck('iso_code'))
                   ->dimensions(1000,500)
                   ->responsive(true);
              return view('admin.charts.index', compact('chart3'));
            }
      .....
      }
      
        

      以下是使用地理图表的图表包的默认代码

      Charts::create('geo', 'highcharts')
          ->title('My nice chart')
          ->elementLabel('My nice label')
          ->labels(['ES', 'FR', 'RU'])
          ->colors(['#C5CAE9', '#283593'])
          ->values([5,10,20])
          ->dimensions(1000,500)
          ->responsive(false);
      

      我收到错误:

        

      调用未定义的方法Torann \ GeoIP \ Location :: pluck()

      任何想法如何实现我的需求?

      提前致谢

1 个答案:

答案 0 :(得分:0)

问题1:我无法在我的方法上获得iso_code(在下面提供)

geoip()->getLocation()会返回Torann\GeoIP\Location个对象,而不是Laravel Collection,因此您无法使用pluck

更改此行:

    ....
    ->labels($data->pluck('iso_code'))
    ....

改为:

    ....
    ->labels($data->iso_code)
    ....

Location类实现了魔术方法__get,因此您只需通过引用它来访问位置属性,就像读取位置对象的属性一样。

查看source code of class Location

问题2:如何在我的网站上获取数据而不提供静态网址?

获取所需信息的一种方法是在项目中创建单独的Service类,然后将其包含在需要iso_code的控制器中。