gpt4 book ai didi

php - 如何扩展 Laravel 供应商包

转载 作者:行者123 更新时间:2023-12-04 17:54:44 25 4
gpt4 key购买 nike

我正在尝试扩展 Kryptonit3/Counter .特别是,我需要覆盖 Counter.php 类中的一个私有(private)函数以仅检索过去 24 小时内的点击次数。

Counter.php 私有(private)函数:

private static function countHits($page)
{
$page_record = self::createPageIfNotPresent($page);
return number_format($page_record->visitors->count());
}

我需要的功能:
private static function countHits($page)
{
$page_record = self::createPageIfNotPresent($page);
return number_format($page_record->visitors()->where('created_at', '>=', Carbon::now()->subDay())->count());
}

因此,我正在寻找覆盖此包的正确方法。

方法一 : 我应该创建自己的类来扩展 Counter.php 并在这个类中包含我的自定义函数吗?如果是这样,原始类中包含的私有(private)类会发生什么情况?我应该创建一个服务提供者吗?这个服务提供者会是什么样子?

方法二 : 我应该 fork 供应商包并根据我自己的需要更新这个包吗?

我已经查看了与此主题相关的所有 stackoverflow 问题,但它们还不够清楚。

更新:
这是我到目前为止所做的:

创建 MyCounter 类:
<?php

namespace App\Helpers\Counter;

use Kryptonit3\Counter\Counter;
class MyCounter extends Counter
{

}

创建 MyCounterServiceProvider:
<?php

namespace App\Providers;

use App\Helpers\MyCounter;
use Illuminate\Support\ServiceProvider;

class MyCounterServiceProvider extends ServiceProvider
{
/**
* Bootstrap the application services.
*
* @return void
*/
public function boot()
{
//
}

/**
* Register the application services.
*
* @return void
*/
public function register()
{
$this->app['counter'] = $this->app->share(function($app)
{
$visitor = $app['visitor'];
return new MyCounter($visitor);
});
}
}

创建 MyCounterFacade:
<?php

namespace App\Helpers\Counter;


use Illuminate\Support\Facades\Facade;

class MyCounterFacade extends Facade
{
protected static function getFacadeAccessor() { return 'mycounter'; }
}

在 config/app.php 中包含提供者和别名:
App\Providers\MyCounterServiceProvider::class,


'MyCounter'             => App\Helpers\Counter\MyCounterFacade::class,

最佳答案

问题与 MyCounterServiceProvider 有关。下一段代码解决了这个问题。

 public function register()
{
$this->app->singleton('mycounter', function() {
return $this->app->make('App\Helpers\Counter\MyCounter');
});
}

关于php - 如何扩展 Laravel 供应商包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41242301/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com