无法使别名和外观在 Laravel 包中工作



我正在开发一个Laravel软件包,但在设置外观/别名时遇到问题。 即,我想有一个用于格式化货币的类,以便在后端和视图中我可以做Money::format(10)并根据货币配置对其进行格式化。

因此,首先在主包提供程序中,我注册了一个帮助程序提供程序,在其中,我有:

public function register()
{
$this->app->singleton(PathToPackageHelpersMoney::class, function ($app) {
return new PathToPackageHelpersMoney();
});
$this->app->alias(PathToPackageHelpersMoney::class, 'money');
}
public function provides()
{
return [PathToPackageHelpersMoney::class, 'money'];
}

我的钱类很简单:

namespace PathToPackageHelpers;
class Money {
public static function format($amount) {
// format and return
}
}

现在,如果我只在控制器中放入use Money,它不起作用,因此别名不起作用。单例工作,如果我在控制器中调用类作为PathToPackageHelpersMoney::format(),它只实例化一次。

在我的观点中也是如此 - 如果我像{{ Money::format() }}一样调用它不起作用,但使用完整路径{{ PathToPackageHelpersMoney::format() }}它就可以工作。

我也做了一个门面类,但不明白在提供者中在哪里连接它?

namespace PathToPackageFacadesMoney;
use IlluminateSupportFacadesFacade;
class Money extends Facade
{
protected static function getFacadeAccessor()
{
return 'money';
}
}

我做错了什么?

我通过将别名添加到module.json的"别名"部分来实现这一点

{
"name": "YourModule",
"alias": "yourmodule",
"description": "",
"keywords": [],
"order": 0,
"providers": [
"Modules\YourModule\Providers\YourModuleServiceProvider"
],
"aliases":{
"money": "PathToPackage\Facades\Money\Money"
},
"files": []
}

最新更新