Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.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 模拟土工编码器水平仪_Php_Google Maps_Laravel_Laravel 5.1_Geocode - Fatal编程技术网

Php 模拟土工编码器水平仪

Php 模拟土工编码器水平仪,php,google-maps,laravel,laravel-5.1,geocode,Php,Google Maps,Laravel,Laravel 5.1,Geocode,我正在使用Laravel应用程序中的Google Maps API处理查找位置的操作。我希望能够模拟facade,以便在测试中它不会实际查询GoogleMapsAPI,因此我将它注入控制器,但这样做会破坏控制器。以下是控制器的相关部分: <?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Http\Requests; use App\Http\Controllers\Controller; u

我正在使用Laravel应用程序中的Google Maps API处理查找位置的操作。我希望能够模拟facade,以便在测试中它不会实际查询GoogleMapsAPI,因此我将它注入控制器,但这样做会破坏控制器。以下是控制器的相关部分:

<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;
use App\Location;
use Geocoder;

class LocationController extends Controller
{
    protected $geocoder;

    public function __construct(Geocoder $geocoder)
    { 
        $this->geocoder = $geocoder;
    } 

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    { 
        // Get location
        $location = $request->input('location');

        try { 
            // Look up location
            $result = $this->geocoder->geocode($location);

            // Return response
            return response()->json($result->toArray(), 200);
        } catch (\Exception $e) { 
            $data = [ 
                'message' => $e->getMessage()
            ];
            return response()->json($data, 400);
        }
    }
}

使用PsySh在调用断点之前插入断点,看起来确实定义了
geocode()
方法,但我不确定为什么。有人能解释一下我哪里出了问题吗?

你不能那样注入外观。没有
geocode
方法

门面的特殊之处在于,它们只提供通往拉雷维尔国际奥委会的通道,而不像普通的教室。它们与依赖注入是正交的

如果服务提供商创建了别名,则可以插入real
Geocoder\Geocoder
类,但必须以这种方式进行设置

我认为您无法正常使用facade,比如
Geocoder::geocode(…)

然而。。。检查Laravel在测试期间如何模拟外观:

这将允许您测试您的控制器,模拟facade调用,这样它就不会真正影响Google

更新: 我创建了一个拉取请求,以使此DI友好:


如果将该请求合并到中,您将能够在控制器方法中插入
\Geocoder\Geocoder
,这是我非常喜欢的

不确定您是否收到关于我更新答案的通知,但我已经创建了一个请求,以使这个包对DI友好。希望你能很快在这里注射@谢谢你。我已经找到了另一种方法,因此解决了这个问题,但将其添加到存储库似乎是一个好主意,因为这似乎是一个微不足道的更改。
PHP Fatal error:  Call to undefined method Toin0u\Geocoder\Facade\Geocoder::geocode()