0

我正在嘗試在Laravel 4(L4)中使用http://geotools-php.org/Laravel 4 IoC容器 - 設置和使用提供程序

我按照說明通過Composer下載(並在供應商文件夾中存在經過驗證的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. 一旦你有了上面的代碼,你應該如何在整個應用程序中正確使用它?

回答

3

我這個庫的維護者訪問實例。

這是不可能的(暫時Laravel BETA 5)到Geotools\Coordinate\Coordinate類綁定就像你想要做的,因爲Laravel IoC容器利己不接受沒有缺省值或類型的反射是automatically resolved參數(即接口/班) 。 container將拋出BindingResolutionException異常。

最好的方法是擴展Geotools類並添加一個將創建Coordinate實例的方法。

我在等GeoTools的任何BC省休息之前等待穩定版本的Laravel 4。

我剛剛爲Laravel 4做了Geotools package。我希望它能幫助你!

0

服務提供商實際上看起來不錯。這些問題可能是在自動加載的情況下發生的,並且沒有看到你如何添加到班級地圖中,很難說出發生了什麼。至於使用嘗試以下方法,

class Foo { 

    protected $coordinate; 

    public function __construct(Coordinate $coordinate) 
    { 
     $this->coordinate = $coordinate 
    } 
} 
+0

這個答案讓我完全困惑。這不像我以前見過的任何例子。我更新了問題以顯示類圖文件,並且提供程序中的實現始終存在。我無法使用此代碼。 – 2013-03-22 12:38:02

0

你應該ABLES通過使用應用程序的外觀

App::make('Coordinate')->$someGeotoolCoordinateFunction(); 
+0

好吧,我現在得到如何使用它,謝謝。現在,它告訴我,在我的app.php中找不到該類(這實際上令我感到鼓舞)。還有一件事我錯過了。我用更多的數據更新了問題。 – 2013-03-22 12:15:53

+0

看來你的設置是正確的。檢查geotools命名空間是否正確(來自軟件包源,我可以告訴它可能是Geotools \ Coordinate \ Coordinate)並運行'composer dumpautoload'以獲得更好的效果。在提供者下的composer.json文件中,使用'app/providers'可能更有效。 – Blessing 2013-03-22 12:45:45