我上了下面的课
<?php
namespace App;
class Currency extends \Casinelli\Currency\Currency
{
/**
* Create a new instance.
*
* @param \Illuminate\Foundation\Application $app
*/
public function __construct($app)
{
parent::__construct($app);
$this->setCurrency(getCurrency());
}
}
我已经替换了app.php
中的“别名”:
- 'Currency' => \Casinelli\Currency\Facades\Currency::class,
+ 'Currency' => \App\Currency::class,
但是,我遇到了以下错误:
Non-static method Casinelli\Currency\Currency::rounded() should not be called statically
似乎我的Currency
类没有被视为Facade
...我将如何解决这个问题?
答案 0 :(得分:0)
在回答之前,我建议叉包装,进行修改并使用叉子。因为如果程序包中发生某些更改,您的覆盖可能不再起作用。
让我们看一下包装。
您有3个重要文件:
您要扩展的货币: https://github.com/Casinelli/Currency/blob/master/src/Casinelli/Currency/Currency.php
您要使用的外观: https://github.com/Casinelli/Currency/blob/master/src/Casinelli/Currency/Facades/Currency.php
最后,注册要扩展的类的ServiceProvider: https://github.com/Casinelli/Currency/blob/master/src/Casinelli/Currency/CurrencyServiceProvider.php#L60
服务提供商将class
货币注册为单身,别名为currency
然后,当您调用facade
货币时,它将寻找别名currency
并返回class
货币的实例。
使用您自己的货币
要使用您自己的币种class
,您将需要在服务提供商中注册自己的币种class
实施,这将替换软件包的服务提供商。
创建自己的serviceProvider
$ php artisan make:provider ExtendedCurrencyServiceProvider
在文件app/config/app.php
中,
替换Casinelli\Currency\CurrencyServiceProvider::class,
与App\Providers\ExtendedCurrencyServiceProvider::class,
<?php
namespace App\Providers;
use Casinelli\Currency\CurrencyServiceProvider;
class ExtendedCurrencyServiceProvider extends CurrencyServiceProvider
{
/**
* Register currency provider.
*/
public function registerCurrency()
{
$this->app->singleton('currency', function ($app) {
return new App\Yournamespace\CurrencyClass($app);
});
}
}
composer.json
中,从自动发现中删除服务提供商 "extra": {
"laravel": {
"dont-discover": [
"Casinelli\\Currency\\CurrencyServiceProvider"
]
}
},
现在,当您调用\Currency::rounded()
时,它将调用您自己的货币实现。
您不需要更改立面。
答案 1 :(得分:0)
错误消息/异常非常令人误解...
此问题是由于致电App\Currency::rounded
而不是:Casinelli\Currency\Facades\Currency::rounded
...