Поэтому я пытаюсь создать своего первого поставщика услуг и бесплатный Фасад в Ларавеле.
Поставщик услуг:
<?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');
}
}
Фасад:
<?php
namespace Jbm\Facades;
use Illuminate\Support\Facades\Facade;
class ReportGenerator extends Facade
{
protected static function getFacadeAccessor()
{
return 'jbm.reportGenerator';
}
}
Кажется, что каждый пакет, на который я смотрю, обрабатывает вещи по-разному. Одна вещь, в которой я запутался, это то, что должно пойти на возвращение getFacadeAccessor()
на фасаде. В моем поставщике услуг я говорю, что это обеспечивает jbm.reportGenerator
и затем использовать это на Фасаде, но я не знаю, как это связано с тем, что я зарегистрировал. Любая помощь будет принята с благодарностью.
Обновить:
Я решил добавить своего поставщика услуг и свой фасад в мой config / app.php, а затем попытался использовать его в контроллере, и он говорит: «Генератор отчетов не найден». Так что, очевидно, не работает … понятия не имею, почему
Обновление 2:
После удаления точки в имени я теперь получаю Call to undefined method Jbm\Facades\ReportGenerator::parseConfig()
,
getFacadeAccessor должен вернуть строку, о которой ваш контейнер «знает». Это означает то, что зарегистрировано через провайдера.
Вы добавляете свой фасад и псевдоним в app.php, чтобы иметь доступ к чему-то, что вы зарегистрировали статически.
Поэтому, когда вы звоните YourFacadeAlias::doSomething();
laravel обнаруживает YourFacaseAlias, видит то, что возвращается из getFacadeAccessor, и использует этот результат для возврата объекта, связанного с ним, из контейнера.
Поскольку ваш фасад и помощник называются «ReportGenerator», проблема может быть связана с обоими. Но я думаю, что вы должны сначала проверить ваш app.php, чтобы увидеть, правильно ли вы его настроили. Затем убедитесь, что ваши getFacadeAccessor и связанные значения совпадают.
Других решений пока нет …