Laravel 5.2 Что идет в фасаде getFacadeAccessor return

Поэтому я пытаюсь создать своего первого поставщика услуг и бесплатный Фасад в Ларавеле.

Поставщик услуг:

<?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(),

3

Решение

getFacadeAccessor должен вернуть строку, о которой ваш контейнер «знает». Это означает то, что зарегистрировано через провайдера.

Вы добавляете свой фасад и псевдоним в app.php, чтобы иметь доступ к чему-то, что вы зарегистрировали статически.

Поэтому, когда вы звоните YourFacadeAlias::doSomething(); laravel обнаруживает YourFacaseAlias, видит то, что возвращается из getFacadeAccessor, и использует этот результат для возврата объекта, связанного с ним, из контейнера.

Поскольку ваш фасад и помощник называются «ReportGenerator», проблема может быть связана с обоими. Но я думаю, что вы должны сначала проверить ваш app.php, чтобы увидеть, правильно ли вы его настроили. Затем убедитесь, что ваши getFacadeAccessor и связанные значения совпадают.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]