2016-03-05 76 views
2

所以我想創建我的第一個服務提供商和免費Facade在Laravel。Laravel 5.2什麼在外觀getFacadeAccessor返回

服務提供商:

<?php namespace Jbm\Providers; 

use Illuminate\Contracts\Http\Kernel; 
use Illuminate\Http\Request; 
use Illuminate\Support\ServiceProvider as BaseServiceProvider; 

use Jbm\Helpers\ReportGenerator; 

class ReportGeneratorServiceProvider extends BaseServiceProvider 
{ 
    /** 
    * Indicates if loading of the provider is deferred. 
    * 
    * @var bool 
    */ 
    protected $defer = true; 

    /** 
    * Register the service provider. 
    * 
    * @return void 
    */ 
    public function register() 
    { 
     $this->app->bind('Jbm\Helpers\Contracts\ReportGeneratorContract', function($app){ 
      return new ReportGenerator(); 
     }); 
    } 

    /** 
    * Add the Cors middleware to the router. 
    * 
    * @param Kernel $kernel 
    */ 
    public function boot(Request $request, Kernel $kernel) 
    { 
     // 
    } 

    /** 
    * Get the services provided by the provider. 
    * 
    * @return array 
    */ 
    public function provides() 
    { 
     return array('jbm.reportGenerator'); 
    } 

} 

門面:

​​

似乎每包我看事情處理方式不同。我感到困惑的一件事是在門面迴歸getFacadeAccessor()應該是什麼。在我的服務提供商中,我說它提供jbm.reportGenerator,然後在Facade中使用它,但我不知道如何連接到我已註冊的內容。任何幫助將不勝感激。

更新:

我決定將我的服務提供商和我的門面,以我的配置/ app.php,然後試圖在控制器使用它,它說:「報告生成未找到」。因此,它顯然是不工作...不知道爲什麼

更新2:

的名字,現在我得到Call to undefined method Jbm\Facades\ReportGenerator::parseConfig()取出後點。

+0

你可以嘗試將jbm.reportGenerator重命名爲reportGenerator嗎?我不確定你是否可以使用像這樣的點 –

回答

2

getFacadeAccessor應返回容器「知道」的字符串。這意味着通過提供商註冊的東西。

您可以將您的門面和別名添加到app.php以便能夠訪問您靜態註冊的內容。

因此,當您致電YourFacadeAlias::doSomething(); laravel檢測到YourFacaseAlias時,看到getFacadeAccessor返回的內容並使用該結果從容器返回與其關聯的對象。

由於您的外觀和幫助程序都被稱爲「ReportGenerator」,因此這兩個問題可能都存在。但我認爲你應該首先檢查你的app.php,看看你是否設置正確。然後確保您的getFacadeAccessor和綁定值匹配。

+0

除了那是我以爲我在做的事情。我有一個提供'reportGenerator'的服務提供者(根據@DenisMysenko的請求刪除點),getFacadeAccessor返回相同的字符串。仍然似乎沒有點擊..... –