0

我正在尝试在 Laravel 4 (L4)中使用http://geotools-php.org/ 。

我按照通过 Composer 下载的说明进行了操作(并在 vendor 文件夹中验证了 geotools 的存在性)。

我将“app/providers/GeoTools.php”添加到我的自动加载类映射中。

以下是内容:

{
    "require": {
        "laravel/framework": "4.0.*",
        "toin0u/geotools": "@stable"
    },
    "autoload": {
        "classmap": [
            "app/commands",
            ... more laravel stuff
            "app/providers/GeoTools.php"
        ]
    }
    ... more laravel stuff

我创建了 /providers/GeoTools.php 文件。

以下是内容:

<?php

use Illuminate\Support\ServiceProvider;

class GeoToolsServiceProvider extends ServiceProvider {

    public function register()
    {
        $this->app->bind('Coordinate', function()
        {

            return new Geotools\Coordinate;

        });
    }

}

在我的 app.php 提供程序数组中,我添加了“GeoToolsServiceProvider”。

以下是我的问题:

  1. 显然我做错了什么,应该怎么做。
  2. 一旦上面的代码正确,你如何在整个应用程序中正确使用它?
4

3 回答 3

3

我是这个库的维护者。

不可能(目前 Laravel Bêta 5)Geotools\Coordinate\Coordinate像您想要的那样绑定类,因为 Laravel IoC 容器不接受没有默认值或类型(即接口/类)的参数,这些参数由反射自动解析。容器会抛出BindingResolutionException异常。

最好的方法是扩展Geotools类并添加一个将创建Coordinate实例的方法。

我正在等待 Laravel 4 的稳定版本,以便在 Geotools 中进行任何 BC 中断。

我刚刚为 Laravel 4 制作了Geotools 包。希望对您有所帮助!

于 2013-04-27T14:25:49.173 回答
0

服务提供商实际上看起来还不错。问题可能在于自动加载,并且没有看到您如何添加到类映射中,很难判断发生了什么。至于用法尝试以下,

class Foo {

   protected $coordinate;

   public function __construct(Coordinate $coordinate)
   {
       $this->coordinate = $coordinate
   }
}
于 2013-03-22T04:27:49.080 回答
0

您应该能够使用 app 外观访问实例

App::make('Coordinate')->$someGeotoolCoordinateFunction();
于 2013-03-22T06:42:11.413 回答