Я разрабатываю пакет Laravel и у меня проблемы с настройкой фасадов / псевдонимов. То есть Я хочу иметь класс для форматирования денег, чтобы в бэкэнде и в представлениях я мог просто сделать Money::format(10)
и отформатировать его в соответствии с конфигурацией валюты.
Итак, сначала в основном поставщике пакетов я зарегистрировал HelpersProvider, а внутри него у меня есть:
public function register()
{
$this->app->singleton(\PathToPackage\Helpers\Money::class, function ($app) {
return new \PathToPackage\Helpers\Money();
});
$this->app->alias(\PathToPackage\Helpers\Money::class, 'money');
}
public function provides()
{
return [\PathToPackage\Helpers\Money::class, 'money'];
}
Мой класс денег прост:
namespace PathToPackage\Helpers;
class Money {
public static function format($amount) {
// format and return
}
}
Теперь, если я поставлю только use Money
в моем контроллере он не работает, поэтому псевдоним не работает. Синглтон работает, хотя, если я назову класс как \PathToPackage\Helpers\Money::format()
в контроллере он создается только один раз.
То же самое в моих взглядах — если я позвоню, как {{ Money::format() }}
это не работает, но используя полный путь {{ \PathToPackage\Helpers\Money::format() }}
это работает.
Я тоже делал фасадный класс, но не понял, где его подключить в провайдере?
namespace PathToPackage\Facades\Money;
use Illuminate\Support\Facades\Facade;
class Money extends Facade
{
protected static function getFacadeAccessor()
{
return 'money';
}
}
Что я делаю неправильно?
Задача ещё не решена.
Других решений пока нет …