2016-03-05 44 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返回相同的字符串。仍然似乎没有点击..... –