Bil*_*son 5 php facade service-provider laravel
因此,我正在努力创建我的第一个服务提供商和Laravel的免费Facade.
服务提供者:
<?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');
}
}
Run Code Online (Sandbox Code Playgroud)
正面:
<?php
namespace Jbm\Facades;
use Illuminate\Support\Facades\Facade;
class ReportGenerator extends Facade
{
protected static function getFacadeAccessor()
{
return 'jbm.reportGenerator';
}
}
Run Code Online (Sandbox Code Playgroud)
似乎我看到的每个包都处理不同的方式.我感到困惑的一件事是getFacadeAccessor()在门面的回归应该是什么.在我的服务提供商中,我说它提供jbm.reportGenerator然后在Facade中使用它,但我不知道它是如何连接到我注册的.任何帮助将不胜感激.
更新:
我决定将我的服务提供商和我的门面添加到我的config/app.php,然后尝试在控制器中使用它,并说"找不到报告生成器".所以它显然不起作用......不知道为什么
更新2:
删除我现在得到的名字中的点Call to undefined method Jbm\Facades\ReportGenerator::parseConfig().
首先,您的服务提供者应该位于App\Providers命名空间中,并且应该扩展ServiceProvider. 所以它看起来像这样:
<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use Jbm\Helpers\ReportGenerator;
class ReportGeneratorServiceProvider extends ServiceProvider
{
public function register()
{
$this->app->bind('Jbm\Helpers\Contracts\ReportGeneratorContract', function($app){
return new ReportGenerator();
});
}
}
Run Code Online (Sandbox Code Playgroud)
之后,外观应该位于App\Facades命名空间中,并且该getFacadeAccessor()方法应该返回服务提供者的类名:
<?php
namespace App\Facades;
use Illuminate\Support\Facades\Facade;
class ReportGenerator extends Facade
{
protected static function getFacadeAccessor()
{
return App\Providers\ReportGeneratorServiceProvider::class;
}
}
Run Code Online (Sandbox Code Playgroud)
现在,让我们将服务提供者和外观添加到应用程序中:
// config/app.php
'providers' => [
App\Providers\ReportGeneratorServiceProvider::class,
]
'aliases' => [
'ReportGenerator' => App\Facades\ReportGenerator::class,
]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2524 次 |
| 最近记录: |